我試圖理解爲什麼下面的代碼是非法的一個字符:改變C字符串
int main()
{
char *c = "hello";
c[3] = 'g'; // segmentation fault here
return 0;
}
,當它遇到char *c = "hello";
什麼是編譯器做什麼?
我理解它的方式,它是一個char自動數組,而c
是指向第一個char的指針。如果是這樣,c[3]
就像*(c + 3)
,我應該能夠完成任務。
只是想了解編譯器的工作方式。
**數組不是指針**和**指針不是數組**。字符串文字('「hello」')是一個由6個字符組成的數組(計數空終止符)。閱讀[comp.lang.c faq](http://c-faq.com/)的第6部分。一旦你完成了,請閱讀其他章節:) – pmg
重複的太多,以列在這裏。 – 2011-09-25 19:28:21
我們需要在SO問題代碼中引入一個過濾器,該代碼檢測'char * XX =「...」'並在那裏提供答案,然後在提問問題對話框中內聯。 –