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

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

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