我知道const char *
是一個指向const char的指針,而char *const
是一個指向char的常量指針。 我在下面的代碼測試此:修改char * const字符串
const char *s = "hello"; // Not permitted to modify the string "hello"
char *const t = "world"; // Not permitted to modify the pointer t
s = "hello2"; // Valid
// t = "world2"; // Invalid, gives compilation error
// *(s + 1) = 'a'; // Invalid, gives compilation error
*(t + 1) = 'a'; // Why does this not work?
最後一行不給任何錯誤,但導致程序意外終止。爲什麼修改t
指向的字符串不允許?
你說出了標準,但你並沒有真正說出爲什麼(程序如何)會因爲錯誤而終止......只是說... Elchonon Edelson給出了實際的原因,我認爲這是正確的答案。 –
@AlexisWilke該標準意味着與平臺無關,這些細節依賴於平臺,這就是爲什麼標準使用諸如未定義行爲之類的語言來涵蓋整個範圍的行爲,包括正常工作但不能依賴的行爲。我爲典型的現代unix平臺添加了更多細節。 –