关于数组字符串问题。

img


上图,我想把字符串复制到另一个数组,但是只有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;
} 

img

可以用sizeof得到数组长度,这个方法可以i