warning: ISO C++ forbids converting a string constant to ‘char*‘ [-Wwrite-strings]

2020-09-20 11:01:05

在linux下編寫C++程式碼:

char* p="wqojbk";

會跳出警告:

warning: ISO C++ forbids converting a string constant to 'char*' [-Wwrite-strings]

這是因為在賦值操作的時候,等號兩邊的變數型別不一樣,那麼編譯器會進行一種叫做 隱式轉換(implicit conversion) 的操作來使得變數可以被賦值。上面的表示式中,等號右邊的"eqojbk"是一個不變常數,在c++中叫做string literal,type是const char *,而p則是一個char指標。如果強行賦值就是將右邊的常數強制型別轉換成一個指標,結果就是我們在修改一個const常數。編譯執行的結果會因編譯器和作業系統共同決定,有的編譯器會通過,有的會拋異常,就算過了也可能因為作業系統的敏感性而被殺掉。

修改方法:

const char* p="wqojbk";

或者

char* p=(char*)"wqojbk";