2

我需要在数组中定义字符并打印字符串……但它总是打印为 string7(在本例中为 test7)……我在这里做错了什么?

#include <stdio.h>
int main() {
    char a[]={'t','e','s','t'};
    printf("%s\n",a);
    return 0;
}
4

3 回答 3

13

为什么会有这种行为?

因为你没有\0终止你的数组,所以你得到的是Undefined behavior

幕后可能会发生什么?

尝试打印字符串,printf直到遇到 a \0,在您的情况下,字符串从未\0终止,因此它随机打印,直到遇到 a \0
请注意,超出分配内存范围的读取是未定义的行为,因此从技术上讲,这是一个 UB。

你需要做什么来解决问题?

你需要:

char a[]={'t','e','s','t',`\0`};

或者

char a[]="test";
于 2013-01-26T05:16:54.147 回答
2

因为您的“字符串”或char[]不是以空值结尾的(即以 结尾\0)。

然后,printf("%s", a);将尝试打印从开头开始的每个字符a并继续打印,直到看到\0.

\0在您的数组之外,并且取决于您的程序内存的初始状态,您几乎无法控制。

要解决此问题,请使用

char a[]={'t','e','s','t','\0'};
于 2013-01-26T05:16:40.087 回答
2

您打印的字符串必须为空终止...所以您的字符串声明应该是,

char a[]={'t','e','s','t', '\0'};
于 2013-01-26T05:17:40.457 回答