这个为什么结果是这样的?

img


帮我看一下 怎么样得出来的结果
帮我看一下 怎么样得出来的结果
为什么结果不是morning呢

评论区讨论了一下,答案基于编译器不同,输出可能不同,新版本 visual studio 中,char 数组默认值就是 '\0',VC6.0 可能不是

解析:for 循环里面有两个变量,i j,i 的初始值为 str1 长度 +1,j 初始值为 0
循环体中的代码, str1[i] = str2[j],按照下标,将 str2 中字符复制到了 str1,str1 中原本的字符依旧保留了,追加了 str2 中的字符
虽说内存 str1 内存中的数据变了,但是由于 good morning 中间存在 '\0' 符号,输出的时候,会自动截断,输出:good

代码如果改动一个地方,循环的时候 i = strlen(str1),输出就会变成 string=goodmorning

img

int main()
{
    char str1[20] = "good", str2[] = "morning";
    int i, j;
    for (i = strlen(str1),j = 0; str2[j] != '\0'; i++, j++)
    {
        str1[i] = str2[j];
    }
    str1[i] = '\0';
    printf("string=%s", str1);
}

兄弟str1和str2后面跟的是中括号str1[i]