“80) 一个字符串字面量可能并不是一个字符串(参见7.1.1),因为可以通过使用\0转义序列将空字符嵌入其中。”
我不理解这个解释中的“因为可以通过使用\0转义序列将空字符嵌入其中”这部分。
关于“字符串”的定义,在引用的第7.1.1节中如下所述:
“字符串是以第一个空字符结尾(包括第一个空字符)的一系列连续字符。”
我想过焦点可能在“可以”上,即字符串字面量不必包含/嵌入空字符,而字符串必须包含。但我又问自己:如果一个字符串字面量没有以空字符结尾,如何将其作为字符串使用(这对于字符串操作函数是必需的,以确定字符串的结束位置)?
我完全不知道该怎么做。
注意:我知道字符串字面量存储在只读内存中不能被修改,而“string”是指以NUL结尾的字符序列,可以或不可以被修改。
因此,我的问题不是:“什么是字符串和字符串字面量的区别?”
我的问题是:
为什么/如何字符串字面量可能不是一个字符串?
根据我目前的疑虑,下面两个问题是否正确?
字符串字面量可以省略NUL字节吗?
我想自己问这个问题,但在发布之前,我得到了线索。我的困惑是由于引用中某些词汇的不恰当使用而产生的。
但我决定不删除问题的草稿,因为它可能对未来的读者有用,并提供一个 Q&A。
随意评论和提示。
相关内容:
char *p = "foo\0bar";
时,我们可以说p
指向一个长度为 3 的字符串;p+4
指向另一个字符串 :) - pmg"foo\0bar"
是一个包含两个字符串的字符串字面值,因此它不是一个字符串。是的,就是那么简单。 - Andrew Henle