为什么我不能在c中修改字符串文字?

时间:2019-10-27 23:39:07

标签: c

我试图了解无法在c中修改字符串文字的原因。

为什么以下内容在c中是非法的?

char* p = "abc";
*p = 'd';

1 个答案:

答案 0 :(得分:4)

来自C89 Rationale, 3.1.4 String literals

  

字符串文字被指定为不可修改。该规范允许实现共享具有相同文本的字符串副本,将字符串文字放置在只读存储器中,并执行某些优化。但是,字符串文字不具有const char的类型数组,以避免指针类型检查的问题,尤其是对于库函数,因为将const char的指针分配给char的普通指针是无效的。那些坚持认为字符串文字应可修改的委员会成员满意地将这种做法指定为通用扩展名(见F.5.5)。