我需要在数组中定义字符并打印字符串......但它总是打印为string7(在本例中为test7)...我在这里做错了什么?
#include <stdio.h>
int main() {
char a[]={'t','e','s','t'};
printf("%s\n",a);
return 0;
}
答案 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'};