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/

10-11 22:57