为什么在C中的字符串后打印数字'7'?

时间:2013-01-26 05:15:50

标签: c string c-strings

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

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

3 个答案:

答案 0 :(得分:13)

  

为什么会出现这种情况?

因为您没有\0终止您的数组,所以您获得的是未定义的行为

  

幕后可能发生什么?

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

  

您需要采取哪些措施来解决问题?

你需要:

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

char a[]="test";

答案 1 :(得分:2)

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

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

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

要解决此问题,请使用

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

答案 2 :(得分:2)

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

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