根据C89标准修改string文字未定义的行为?

我相信在C99中,string文字的修改是不确定的行为。 我没有这个标准的副本,但是我有一个在6.4.5第7段中陈述的C1X(n1570)草案:

没有说明这些数组是否是不同的,只要它们的元素具有适当的值。 如果程序试图修改这样一个数组,行为是不确定的。

我find了一个关于这个话题的Stack Overflow 问题 ,并且包含了Jonathan Leffler的以下评论:

最初,C89(C90)标准没有规定修改文字,因为在标准之前编写的代码太多,会被破坏。

但是我也看到了很多关于string文字types的讨论,以及它们是char[N]而不是const char[N]的事实。 我认为,这个决定是为了使现有的大量代码不会中断。

任何人都可以给我一个明确的答案。 在C89string文字修改UB?

是的,它们在C89中是不可修改的。

(C90,6.1.4)“如果程序试图修改任何一种forms的string,行为是不确定的”

即使在K&R第二版中,也有关于string不变性的引用。

(K&R2,5.5)“如果您尝试修改string内容,结果是不确定的”

(K&R2,附录C)“string不再可修改,因此可以放在只读存储器中”

在ANSI C89的基本原理中,有一个解释为什么它是不可修改的:

(ANSI C89 Rationale,3.1.4)“string文字被指定为不可修改的,该规范允许实现共享具有相同文本的string副本,将string文字放置在只读内存中,并执行某些优化。