写代码的时候遇到了这个提示
ISO C++11 does not allow conversion from string literal to 'char *'
在代码中是这样子的
char *p = "hello world";
查了一下,C++11以后的标准应该不允许这样的格式,"hello world"
是字面常量,用一个指针p
去指向它,事实上没有办法通过p
去改变字面常量的。
*(++p) = '\0'; //错误:改变不了
而如果是这样子定义的话:
const char *p = "hello world";
是没有问题的,同样也就限制了通过p
来改变字符串值了。
如果p
指向的不是常量字符串,一般来说可以通过p
来改变字符串。比如这样子定义:
char p[] = "hello world"; //p指向堆的一块内存
p[0] = 'a';
*p = 'a';
同样也可以通过动态分配来使p
指向一块堆内存:
char *p = new char;
但是不要想当然的再给p
“赋值”:
char *p = new char;
p = "hello world";
其实这样子还是使p
指向了字面常量,而分配的堆内存由于没有正确释放造成内存泄露。