首页 > 解决方案 > 为什么我不能在 c 中修改字符串文字?

问题描述

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

为什么以下在 C 中是非法的?

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

标签: c

解决方案


C89 基本原理,3.1.4 字符串文字

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


推荐阅读