我需要在数组中定义字符并打印字符串……但它总是打印为 string7(在本例中为 test7)……我在这里做错了什么?
#include <stdio.h>
int main() {
char a[]={'t','e','s','t'};
printf("%s\n",a);
return 0;
}
为什么会有这种行为?
因为你没有\0
终止你的数组,所以你得到的是Undefined behavior。
幕后可能会发生什么?
尝试打印字符串,printf
直到遇到 a \0
,在您的情况下,字符串从未\0
终止,因此它随机打印,直到遇到 a \0
。
请注意,超出分配内存范围的读取是未定义的行为,因此从技术上讲,这是一个 UB。
你需要做什么来解决问题?
你需要:
char a[]={'t','e','s','t',`\0`};
或者
char a[]="test";
因为您的“字符串”或char[]
不是以空值结尾的(即以 结尾\0
)。
然后,printf("%s", a);
将尝试打印从开头开始的每个字符a
并继续打印,直到看到\0
.
那\0
在您的数组之外,并且取决于您的程序内存的初始状态,您几乎无法控制。
要解决此问题,请使用
char a[]={'t','e','s','t','\0'};
您打印的字符串必须为空终止...所以您的字符串声明应该是,
char a[]={'t','e','s','t', '\0'};