#include<stdio.h>void main(){ char *p="nyks"; p[2]='n'; printf("%s",p);}這會因SEGMENTATION FAULT崩潰。有人可以解釋為什么嗎?C
3 回答

瀟瀟雨雨
TA貢獻1833條經(jīng)驗 獲得超4個贊
該標準要求定義文字字符串const
。您無法更改。
編譯器將文字放在只讀存儲器部分中。您可以輸出裝配并遵守該要求。如果您使用的是GCC,則通過-s標志完成。它將把字符串放在.rodata節(jié)中。

汪汪一只貓
TA貢獻1898條經(jīng)驗 獲得超8個贊
嘗試覆蓋字符串文字是未定義的行為。C99§6.4.5/ 6:
如果程序嘗試修改這樣的數(shù)組,則行為未定義。
附錄J.2(未定義的行為)中對此進行了重申。
如果您改為:
char p[] = "nyks";
您可以分配和初始化自動(堆棧)字符數(shù)組。在這種情況下,修改元素就很好了。
- 3 回答
- 0 關(guān)注
- 485 瀏覽
添加回答
舉報
0/150
提交
取消