【发布时间】:2017-08-14 23:22:07
【问题描述】:
字符串文字是左值,这为修改字符串文字打开了大门。
简而言之,来自 C:
在 C 源代码中,文字是表示固定值的记号,可以是整数、浮点数、字符或细绳。文字的类型由它的值和符号决定。 这里讨论的文字不同于 C99 标准中引入的复合文字。复合文字是普通的可修改对象,类似于变量。
虽然 C 并不严格禁止修改字符串文字,但您不应尝试这样做。一方面,编译器将字符串文字视为常量,可能会将其放在只读内存中,在这种情况下,尝试的写入操作会导致错误。另一方面,如果程序中使用了两个或多个相同的字符串字面量,编译器可能会将它们存储在同一位置,这样当您访问另一个时,修改一个会导致意外结果。
-
第一段说“C 中的文字表示一个固定值”。
这是否意味着不应修改文字(复合文字除外)?
既然字符串文字不是复合文字,是否应该修改字符串文字?
- 第二段说“C不严格禁止 修改字符串文字”,而编译器这样做。字符串也应该如此 文字被修改?
这两段是否相互矛盾?我该如何理解它们?
可以修改既不是复合文字也不是字符串文字的文字?
【问题讨论】:
-
所有的书都是谎言。只相信标准。
-
谢谢。我会记住这一点。我认为这本书紧跟标准,并以更易于理解的方式解释了标准。
-
字符串字面量可以改变,但改变的结果是不确定的。
-
相关阅读,我推荐这个:stackoverflow.com/questions/2397984/…
-
K&R C 没有关键字
const,因此他们无法制作字符串文字const char。
标签: c literals string-literals