我正在尝试设置一些像这样的字符串变量:

char thingA[7], thingB[7], thingC[7];
strcpy(thingA, "StringA");
strcpy(thingB, "StringB");
strcpy(thingC, "StringC");
printf("%s\n", thingA);
printf("%s\n", thingB);
printf("%s\n", thingC);


但是不要像这样输出:

StringA
StringB
StringC


它输出如下:

StringA StringB StringC
StringB StringC
StringC


我已经尝试过使用sprintf,但是得到相同的结果。
老实说,我不知道发生了什么或如何解决此问题,而且我在网上也找不到任何东西,因为出于某种原因,搜索此类东西已被证明很难。
那么基本上为什么它将字符串b和c存储在a中,而将c存储在b中呢?

最佳答案

常见错误:您的声明短了一个字节。如果计算常量字符串中的字符数,则为7,并且需要用于终止'\0'的空间,否则将覆盖内存并获得未定义的行为。

因此,将它们声明为[8],它将起作用。

08-16 13:16