關於C++ Primer Plus中的程式清單7.9在VS2022預覽版引發E0144錯誤的解決方法
阿新 • • 發佈:2021-10-28
E0144:const char *“ 型別的值不能用於初始化 “char *“ 型別的實體
在程式清單7.9中這條語句引發了錯誤:
char* wail = "ululate";
書中寫到:
假設要將字串作為引數傳遞給函式,則表示字串的方式有3種:
- char陣列
- 用引號括起的字串常量(也稱字串字面值)
- 被設定為字串的地址的char指標。
但上述選擇的型別都是char指標(準確地說是char*),因此可以將其作為字串處理函式的引數:
......
程式清單7.9的目的是要向我們演示宣告將C-風格字串作為引數的函式,但是書中的程式碼卻出現了錯誤。
依照網上的方法一一嘗試並按照我們的目的進行取捨。
解決方法:
-
在其前面新增
const
限定符:const char* wail = "ululate";
程式不報錯
輸出結果:
3 m chararcters in minimum 2 u characters in ululate
-
先將字串使用字元陣列進行儲存,再使用指標
char wail[15] = "ululate"; char* wail_window = wail;
輸出結果正確
但是陣列名本身就意味著指標,可以想7.9中的mmm一樣直接用陣列名即可。
-
對變數進行強轉:
char* wail = (char*)"ululate"; //或者 char* wail = const_cast<char*>("ululate");
輸出結果正確
-
專案 -> 屬性 -> C/C++ -> 語言 -> 符合模式:否
還是用書中的程式碼:char* wail = "ululate";
結果正確。
參考: