你能解释一下下面两个c代码片段之间的区别吗

标签 c

    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/

相关文章:

c++ - 如何在 C 宏中连接变量字符串和文字字符串?

python - 将 numpy-C 数组转换为 C double* [] 并返回

c - 使用 ctrl-c 的信号处理程序 - 需要无限循环的帮助

c - 将变量参数传递给新创建的进程

c - 错误 LNK2019 和 LNK1120 (Visual Studio 2008)

C 这个无分支黑客实际上更快吗?

c - &((struct name *)NULL -> b) 是否会导致 C11 中的未定义行为?

c - 乱码数组 - 检查数组中的元素是否匹配(顺序无关紧要)复杂度为 O(n)

c - 在 C 中使用 isdigits 、 isalpha 和 ispunct

C指针字符数组到字符数组