我的错!我曾假设以下来自一本臭名昭著但广受欢迎的书的摘录是完全有效的 C。但直到今天我才被指出它与 UB 一起使用(尽管我还没有找到它是怎么回事)。因此这里是书中的那个特定部分。如果您能以编号的方式指出每个特定陈述的错误或 UB,以及对这些陈述的适当更正,您将对我和许多其他像我一样的“受害者”大有帮助。
char *p = "Hello" ; /* pointer is variable, so is string */
*p = 'M' ; /* works */
p = "Bye" ; /* works */
const char *q = "Hello" ; /* string is fixed pointer is not */
*q = 'M' ; /* error */
q = "Bye" ; /* works */
char const *s = "Hello" ; /* string is fixed pointer is not */
*s = 'M' ; /* error */
s = "Bye" ; /* works */
char * const t = "Hello" ; /* pointer is fixed string is not */
*t = 'M' ; /* works */
t = "Bye" ; /* error */
const char * const u = "Hello" ; /* string is fixed so is pointer */
*u = 'M' ; /* error */
u = "Bye" ; /* error */