1. 程式人生 > 其它 >關於C++ Primer Plus中的程式清單7.9在VS2022預覽版引發E0144錯誤的解決方法

關於C++ Primer Plus中的程式清單7.9在VS2022預覽版引發E0144錯誤的解決方法

E0144:const char *“ 型別的值不能用於初始化 “char *“ 型別的實體

在程式清單7.9中這條語句引發了錯誤:

char* wail = "ululate";

書中寫到:

假設要將字串作為引數傳遞給函式,則表示字串的方式有3種:

  • char陣列
  • 用引號括起的字串常量(也稱字串字面值)
  • 被設定為字串的地址的char指標。

但上述選擇的型別都是char指標(準確地說是char*),因此可以將其作為字串處理函式的引數:

......

程式清單7.9的目的是要向我們演示宣告將C-風格字串作為引數的函式,但是書中的程式碼卻出現了錯誤。

依照網上的方法一一嘗試並按照我們的目的進行取捨。

解決方法:

  1. 在其前面新增 const 限定符:

    const char* wail = "ululate";
    

    程式不報錯

    輸出結果:

    3 m chararcters in minimum
    2 u characters in ululate
    
  2. 先將字串使用字元陣列進行儲存,再使用指標

    char wail[15] = "ululate";
    char* wail_window = wail;
    

    輸出結果正確

    但是陣列名本身就意味著指標,可以想7.9中的mmm一樣直接用陣列名即可。

  3. 對變數進行強轉:

    char* wail = (char*)"ululate";
    //或者
    char* wail = const_cast<char*>("ululate");
    
    

    輸出結果正確

  4. 專案 -> 屬性 -> C/C++ -> 語言 -> 符合模式:否
    還是用書中的程式碼:

    char* wail = "ululate";
    

    結果正確。


參考:

  1. C++錯誤:“const char *“ 型別的值不能用於初始化 “char *“ 型別的實體_ISP行業的忠實粉絲-CSDN部落格
  2. E0144"const char *" 型別的值不能用於初始化 "char *" 型別的實體的三種解決方法 - 雲+社群 - 騰訊雲 (tencent.com)
  3. (1條訊息) VS C++ 2019中const char* 型別的值不能用於初始化char*的解決與理解_dxgzg的部落格-CSDN部落格