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

rzr*_*scm 2 c string c-strings

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

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

Alo*_*ave 13

为什么会这样?

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

幕后可能发生什么?

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

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

你需要:

char a[]={'t','e','s','t',`\0`};
Run Code Online (Sandbox Code Playgroud)

要么

char a[]="test";
Run Code Online (Sandbox Code Playgroud)

  • 啊......谢谢.出于某种原因,我认为\ 0会自动附加到字符数组的末尾. (2认同)