2012-12-24 44 views
0

可能重複:
Why does char* cause undefined behaviour while char[] doesn’t?該代碼在哪裏出現seg錯誤?

請各位看看下面

int main (int argc, char* argv[]) 
{ 
    char* s = "Hello world!"; 
    s[0] = 'X'; 
    return 0; 
} 

的代碼你在哪裏的賽格故障來自於這個代碼?

更新: 相反,下面的代碼不給seg故障,爲什麼?

int main (int argc, char* argv[]) 
{ 
    char s[] = "Hello world!"; 
    s[0] = 'X'; 
    return 0; 
} 
+2

查看複製品。簡而言之,'char * s =「Hello World!」;'讓's'指向字符串文字(的第一個字符),並試圖修改字符串文字是未定義的行爲,通常是因爲它們存儲在只讀內存。 'char s [] =「Hello World!」;'創建一個可寫的'char [13]'。 –

+0

我們可以爲這個特別的複製品分開標籤嗎? 'char * variable =「string」;變量[0] = 'CH';'? ;) – anishsane

回答

3

"Hello world!"是一個靜態字符串,你不能改變它。

+0

請參閱我的更新問題,並請更新答案,謝謝! – daNullSet