关于C语言中的Null字符



这是我的程序:单击链接查看程序在这个程序中,

char c[5] = "helloworld";

当我使用以下行打印字符串c时:

printf("nstring c=%s", c);

它给出了以下输出(末尾有微笑符号,与下面的符号不完全一样,但我可以说它是一个微笑符号:

string c=hello(•‿•)

为什么它不在输出中打印你好?因为字符串的大小只有5?

提前谢谢。

数组c只有5个字符宽,并且给定的初始值设定项对于该大小的数组来说字符太多。因此,只有字符串常量的前5个字符用于初始化数组。

这意味着数组仅包含字符'h''e''l''l''o'。换句话说,您没有字符串,因为它不是以null结尾的。因此printf最终读取超过数组的末尾,从而触发未定义的行为。

如果省略数组大小:

char c[]="helloworld";

它将变得足够大,可以容纳整个初始化器。则CCD_ 9将打印";你好";因为它将在空字节处停止读取。

最新更新