查看下面的声明
const char REASON_POR = "POR";
问题是,为什么REASON_POR
会被NULL
终止?
答案 0 :(得分:1)
此:
const char REASON_POR = "POR";
错误,因为REASON_POR
是char
类型的常量,并且您要为其指定一个字符串,而您应该只指定一个字符,例如'P'。
严格地说,C中没有赋值字符串,而只能指定带有char字符的指针(如果是字符串)。 *
将(字符串的)指针指定给char
会调用未定义的行为。
* 此规则只有一个例外 - 初始化char表(或一般的任何其他表或结构):char str[]="foo";
其中正在复制实际字符串。 子>
答案 1 :(得分:0)
字符串文字由语言定义,最后有一个nul字节。这就是4
等于3
而不是{{1}}的原因。当编译器在输出二进制文件中生成字符串文字时,它会安排nul字节存在。
答案 2 :(得分:0)
如果我不得不猜测为什么C中的字符串是空终止的,那可能是因为Dennis Ritchie认为能够识别字符串的结尾是个好主意。许多便利功能都可以使用此功能,例如strlen