我相信在 C99 中,字符串文字的修改是未定义的行为。我没有该标准的副本,但我有一份 C1X (n1570) 草案,该草案在 6.4.5 第 7 段中说明:
如果它们的元素具有适当的值,则未指定这些数组是否不同。如果程序尝试修改这样的数组,则行为未定义。
我发现了一个涉及该主题的 Stack Overflow问题,其中包含来自 Jonathan Leffler 的以下评论:
最初,C89 (C90) 标准并没有禁止修改文字,因为在标准之前编写的代码太多会被它破坏。
但我也看到了很多关于字符串文字类型char[N]
的讨论,以及它们是和不是的事实const char[N]
。我认为做出这个决定是为了不破坏现有的大量代码。
谁能给我一个明确的答案。C89中的字符串文字修改UB吗?