这是我的程序: Click link to see the program 在这个程序中,
char c[5] = "hello\0world";
当我使用以下行打印字符串 c
时:
printf("\nstring c=%s", c);
它给出了以下输出(末尾带有微笑符号,与下面的符号不完全一样,但我可以说它是一个笑脸符号:
string c=hello(•‿•)
为什么不打印 hello 在输出中?因为字符串的大小只有5?
提前致谢。
最佳答案
数组 c
只有 5 个字符宽,对于该大小的数组来说,给定的初始值设定项包含太多字符。因此仅使用字符串常量的前 5 个字符来初始化数组。
这意味着数组仅包含字符 'h'
、'e'
、'l'
、'l '
和 'o'
。换句话说,您没有字符串,因为它不是以 null 结尾的。因此,printf
最终读取超出数组末尾的内容,触发 undefined behavior .
如果省略数组大小:
char c[]="hello\0world";
它将变得足够大以适合整个初始值设定项。然后 printf
将打印“hello”,因为它将在空字节处停止读取。
关于c - 关于C语言中的空字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71286694/