我正在尝试设置一些像这样的字符串变量:
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]
,它将起作用。