c - 关于C语言中的空字符

标签 c string character sizeof chararray

这是我的程序: 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/

相关文章:

mysql - WordPress 网站 : Random Character Coding error

从进程上下文计算 1 秒内的中断次数

macos - 源代码中的杂散字符 - 快速键入时添加

linux - 计算可打印字符

java - 如何使用java代码在新行中写入文件

string - 如何在erlang中格式化带有整数的扁平字符串?

python - Python 中重复字符串而不进行乘法运算

c - 2 编译器错误预期 ';' 在声明列表的末尾和字段 'x' 声明为函数?

检查是否有超过 1 个参数

c - 将输入获取到动态分配的内存中,然后返回指针