修改字串文字

在此程式碼示例中,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';

這是因為每次初始化陣列時,字串文字都被有效地複製到陣列中(對於具有靜態持續時間的變數,每次為具有自動或執行緒持續時間的變數建立陣列時 - 未初始化分配持續時間的變數),以及可以修改陣列內容。