下面是我的理解,供参考:
我用strlen函数计算了下str地址处的字符的长度是14,根据推测,应该是中文字符占据了两个字符长度的原因:“你的密码是”里面五个中文字符占据10个字符长度,后面的":!!!"四个英文状态下的字符占据四个字符长度,总共14个字符长度,所以需要用14个字符的长度才能容纳这些字符,如果再加上结尾的空字符'\0',则需要15个字符长度。
用#define STR “文字。”定义的明示常量可以用字符指针赋值为STR就可以访问了。(参考:C Prime Plus第6版第324页 )
下面是测试的代码:
#include <stdio.h>
#include <string.h>
#define STR2 "文字。"
int main(void){
char str[]={"你的密码是:!!!"},STR[14];
int i;
// for(i=0;i<=14;i++){
// printf("i=%d,STR[%d]=%c,STR[%d]=%d\n",i,i,STR[i],i,STR[i]);
// }
printf("strlen(str)=%d\n",strlen(str));
for(i=0;i<=13;i++){
STR[i]=str[i];
}
//用字符指针指向这个由define定义的明示常量,然后访问这个明示常量,参考C Primer Plus第六版第324页,第522页
char * ar =STR2;
printf("%s\n",ar);
// for(i=0;i<=14;i++){
// printf("i=%d,STR[%d]=%c,STR[%d]=%d\n",i,i,STR[i],i,STR[i]);
// }
printf("%s\n",STR);
return 0;
}
可以用sizeof得到数组长度,这个方法可以i