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以后的标准应该不允许这样的格式,"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指向了字面常量,而分配的堆内存由于没有正确释放造成内存泄露。

    原文作者:陶新芝
    原文地址: https://www.jianshu.com/p/a0b3d2a263fb
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞