2017-04-01 343 views
0

我是C++新手。 我有一個計劃:C++,char *字符串修改

#include <iostream> 

int main() 
{ 
    char* str = "Test"; 
    *str = 'S'; 
} 

的問題是,爲什麼*海峽= 'S' 崩潰的程序? 據我所知str必須指向字符串的第一個字符(好,字符數組),所以理論上我應該能夠修改它。 是因爲內存對於定義的常量值是隻讀的嗎? 我使用的是gcc 5.3.0。

+0

「是因爲內存是隻讀的定義常量? 「搞定了。 – user4581301

+0

我認爲你可以將char *替換爲char [],然後你可以修改它。 –

+0

從C++ 11開始這是無效的。 – chris

回答

3

why * str ='S'crash programme?

因爲您不允許修改字符串文字。 C++標準允許它們存儲在只讀存儲器中。

事實上,如果啓用編譯器警告,您可以:

prog.cc:5:16: warning: ISO C++ forbids converting a string constant to 'char*' [-Wwrite-strings] 
    char* str = "Test"; 
       ^~~~~~ 

始終使用const char*指向時,字符串文字: