寫代碼的時候遇到了這個提示
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)存泄露。