【发布时间】:2012-04-03 20:52:34
【问题描述】:
我相信在 C99 中,字符串文字的修改是未定义的行为。我没有该标准的副本,但我有一份 C1X (n1570) 草案,在 6.4.5 第 7 段中有说明:
如果这些数组的元素具有 适当的值。如果程序试图修改这样的数组,行为是 未定义。
我发现了一个 Stack Overflow question 涉及到这个主题并包含来自 Jonathan Leffler 的以下评论:
最初,C89 (C90) 标准并没有禁止修改文字,因为在标准之前编写的代码太多会被它破坏。
但我也看到很多关于字符串文字的 type 的讨论,以及它们是 char[N] 而不是 const char[N] 的事实。我认为做出这个决定是为了避免大量现有代码被破坏。
谁能给我一个明确的答案。 C89中的字符串字面量修改是UB吗?
【问题讨论】:
-
什么?据我所知,字符串文字是
const char *... -
@H2CO3:不在 C 中。
-
我记得看到过一个用于古老的 PDP-11 的程序,它会在目标代码中合并相同的字符串以使其更小,因此即使在 C89 之前修改字符串文字也是一个坏主意。
标签: c