可能重複:
Why does char* cause undefined behaviour while char[] doesn’t?不能修改堆棧串在C
以下代碼
int main() {
char * st = "abc";
*st = 'z';
return 0;
}
返回一個段故障。如果堆棧中的字符串不可修改,爲什麼它在編譯時沒有提供錯誤?
可能重複:
Why does char* cause undefined behaviour while char[] doesn’t?不能修改堆棧串在C
以下代碼
int main() {
char * st = "abc";
*st = 'z';
return 0;
}
返回一個段故障。如果堆棧中的字符串不可修改,爲什麼它在編譯時沒有提供錯誤?
棧st上的變量是一個指針。分配的值是一個字符串常量(只讀)。
char *str = "this is dangerous to modify";
不是您獲得同樣意義的字符串;它被稱爲字符串文字並根據標準修改它會產生未定義的行爲。
如果你想有一個字符串,您可以稍後修改,是這樣的:
char str[] = "Some String";
然後相應地修改它。
字符串文字是隻讀的。聲明一個char *數組*。這是一個**非常**的常見問題,順便說一句。查看[這個問題](http://stackoverflow.com/questions/8302290/why-does-char-cause-undefined-behaviour-while-char-doesnt/8302326#8302326),例如。 – WhozCraig
字符串不在堆棧上。它在數據段中。 (指向字符串的指針在堆棧上)。 –
由於兼容性原因,它沒有給出編譯時錯誤。 ''abc''的類型實際上是'char const [4]',它會給編譯器提供一個錯誤。 –