上图,我想把字符串复制到另一个数组,但是只有i<=13的时候才能把整个字符串打印出来,还有不知道我这个方法对不对。
还有一个问题,如果我#define STR "文字。"
然后怎么才能把他复制过来我另外定义的str,求解答,谢谢。
下面是我的理解,供参考:
我用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;
}