【发布时间】:2021-08-12 02:22:52
【问题描述】:
我试图了解无法在 C 中修改字符串文字的原因。
为什么下面的 C 语言是非法的?
char* p = "abc";
*p = 'd';
【问题讨论】:
-
这并不违法,正如您所写的那样。您的代码将在
C(以及C++)中编译。 -
@Adrian:仅仅因为它编译并不意味着它是合法/有效的。不是。
-
@R.. 语句
char* p = "abc";将p声明为指向四个字符数组的指针;语句*p = 'd';将值d分配给该数组的第一个元素。这有什么不合法的? -
@Adrian: C 2018 6.4.5 7 说,对于由源文本中的字符串文字创建的数组,“如果程序尝试修改这样的数组,则行为未定义。”在 C++ 中,字符串字面量是一个由
const字符组成的数组,在char *p = "abc";中从const char *到char *的隐式转换是不允许的。 -
这真的是复制品吗?另一个似乎在问为什么提问者期望工作的东西不起作用。这个问题似乎在问为什么语言是这样的。请参阅:“无法做到的原因”。
标签: c