修改字符串文字

在此代码示例中,char 指针 p 初始化为字符串文字的地址。尝试修改字符串文字具有未定义的行为。

char *p = "hello world";
p[0] = 'H'; // Undefined behavior

但是,直接修改 char 的可变数组,或通过指针修改自然不是未定义的行为,即使其初始化程序是文字字符串。以下是好的:

char a[] = "hello, world";
char *p = a;

a[0] = 'H';
p[7] = 'W';

这是因为每次初始化数组时,字符串文字都被有效地复制到数组中(对于具有静态持续时间的变量,每次为具有自动或线程持续时间的变量创建数组时 - 未初始化分配持续时间的变量),以及可以修改数组内容。