for(int i=0;i<5;i++)
{
char name[10];
strcat(name,"jack");
printf("%s\n",name );
}
输出:
����jack
����jackjack
����jackjackjack
����jackjackjackjack
����jackjackjackjackjack
第二个
for(int i=0;i<5;i++)
{
char name[10]="";
strcat(name,"jack");
printf("%s\n",name );
}
输出:
jack
jack
jack
jack
jack
第一种情况的输出怎么这么奇怪?里面发生了什么?这是哪个概念?
最佳答案
char name[10];
strcat(name,"jack");
在这里,您刚刚声明了一个由 10 个字符组成的未初始化字符串:当您尝试打印它时,它们是垃圾。
然后将“jack”附加到它上面。
在每个循环在您的情况中,使用相同的地址,因此您可以在随机字符后返回连续的“jack”。
事实上,printf
会一直尝试打印,直到遇到 \0
:在每个循环中,并且因为程序重复使用相同的地址 \0
code> 被覆盖并再次附加“jack”(它隐式以 null 终止)。
char name[10]="";
strcat(name,"jack");
在这种情况下,数组在每个循环中以及每次向其附加“jack”时都会被初始化为空。
即使使用相同的地址,在使用 strcat
之前初始化也会确保 \0
。
关于你能解释一下下面两个c代码片段之间的区别吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27383442/