修改字串文字
在此程式碼示例中,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';
這是因為每次初始化陣列時,字串文字都被有效地複製到陣列中(對於具有靜態持續時間的變數,每次為具有自動或執行緒持續時間的變數建立陣列時 - 未初始化分配持續時間的變數),以及可以修改陣列內容。