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
被覆盖并再次附加了“ jack”(它隐式为null-终止)。char name[10]="";
strcat(name,"jack");
在这种情况下,每次循环以及每次将“ jack”附加到数组时,该数组都将初始化为空。
即使使用相同的地址,也要在使用
\0
之前进行初始化以确保strcat
。关于c - 您能否在下面解释两个C代码段之间的区别,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27383442/