我需要定义一个数组中的字符,并打印它总是打印为string7 (在本例中为test7)的string...But (在本例中为test7)...What我做错了吗?
#include <stdio.h>
int main() {
char a[]={'t','e','s','t'};
printf("%s\n",a);
return 0;
}发布于 2013-01-26 13:16:54
为什么会出现这种行为?
因为您没有终止您的阵列,所以您得到的是 \0 。
幕后会发生什么?
printf尝试打印字符串,直到遇到\0为止,在本例中,字符串从未以\0结尾,所以它会随机打印,直到遇到\0为止。
请注意,超出分配的内存界限的读取是未定义的行为,因此从技术上讲,这是一个UB。
你需要做什么来解决这个问题?
您需要:
char a[]={'t','e','s','t',`\0`};或
char a[]="test";发布于 2013-01-26 13:16:40
因为您的"string“或char[]不是以null结尾的(即以\0结尾)。
然后,printf("%s", a);将尝试打印从a开头开始的每个字符,并继续打印,直到看到\0为止。
这个\0在你的数组之外,并且依赖于你的程序内存的初始状态,而你几乎无法控制它。
要修复此问题,请使用
char a[]={'t','e','s','t','\0'};发布于 2013-01-26 13:17:40
您打印的字符串必须为空,您的字符串声明应为terminated...so,
char a[]={'t','e','s','t', '\0'};https://stackoverflow.com/questions/14534098
复制相似问题