C语言 如何终止 NULL



查看下面的声明

const char REASON_POR = "POR";

问题是,为什么REASON_POR会被NULL终止?

这个:

const char REASON_POR = "POR";

错误的,因为 REASON_PORchar 类型的常量,并且您正在为其分配一个字符串,而您应该只分配一个字符,例如"P"。

严格来说,在 C 中没有分配字符串,而只能使用字符的地址(如果是字符串)分配指针。*

将(字符串的)指针分配给char会调用未定义的行为


*此规则只有一个例外 - char 表(或任何其他表或结构)的初始化:char str[]="foo";正在复制实际字符串的地方。

字符串文本由语言定义为末尾有一个 NUL 字节。这就是为什么sizeof("POR")等于4,而不是3。当编译器将字符串文本生成到输出二进制文件中时,它会安排存在 nul 字节。

如果我不得不猜测为什么 C 中的字符串以 null 结尾,那可能是因为 Dennis Ritchie 认为能够识别字符串的结尾是个好主意。许多便利功能都使用此功能工作,例如 strlen

相关内容

  • 没有找到相关文章

最新更新