ISO C++11 does not allow conversion from string literal to 'char *'

寫代碼的時候遇到了這個提示

ISO C++11 does not allow conversion from string literal to 'char *'

在代碼中是這樣子的

char *p = "hello world";

查了一下,C++11以后的標(biāo)準(zhǔn)應(yīng)該不允許這樣的格式,"hello world"是字面常量,用一個指針p去指向它,事實上沒有辦法通過p去改變字面常量的。

*(++p) = '\0'; //錯誤:改變不了

而如果是這樣子定義的話:

const char *p = "hello world";

是沒有問題的,同樣也就限制了通過p來改變字符串值了。

如果p指向的不是常量字符串,一般來說可以通過p來改變字符串。比如這樣子定義:

char p[] = "hello world"; //p指向堆的一塊內(nèi)存
p[0] = 'a';
*p = 'a';

同樣也可以通過動態(tài)分配來使p指向一塊堆內(nèi)存:

char *p = new char;

但是不要想當(dāng)然的再給p“賦值”:

char *p = new char;
p = "hello world";

其實這樣子還是使p指向了字面常量,而分配的堆內(nèi)存由于沒有正確釋放造成內(nèi)存泄露。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 版權(quán)聲明:本文為 gfson 原創(chuàng)文章,轉(zhuǎn)載請注明出處。注:作者水平有限,文中如有不恰當(dāng)之處,請予以指正,萬分感謝...
    gfson閱讀 3,503評論 0 6
  • 指針是C語言中廣泛使用的一種數(shù)據(jù)類型。 運用指針編程是C語言最主要的風(fēng)格之一。利用指針變量可以表示各種數(shù)據(jù)結(jié)構(gòu); ...
    朱森閱讀 3,619評論 3 44
  • 第一章 Nginx簡介 Nginx是什么 沒有聽過Nginx?那么一定聽過它的“同行”Apache吧!Ngi...
    JokerW閱讀 33,039評論 24 1,002
  • 1. C++基礎(chǔ)知識點 1.1 有符號類型和無符號類型 當(dāng)我們賦給無符號類型一個超出它表示范圍的值時,結(jié)果是初始值...
    Mr希靈閱讀 18,174評論 3 82
  • ▼ 時光流轉(zhuǎn),加入簡書寫作仿佛還在昨天,不過一眨眼,已經(jīng)到了一個月的收梢。 回顧這30天,我感慨萬千,邂逅簡書,對...
    熊貓女俠閱讀 1,360評論 38 51

友情鏈接更多精彩內(nèi)容