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指向了字面常量,而分配的堆内存由于没有正确释放造成内存泄露。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 版权声明:本文为 gfson 原创文章,转载请注明出处。注:作者水平有限,文中如有不恰当之处,请予以指正,万分感谢...
    gfson阅读 8,677评论 0 6
  • 指针是C语言中广泛使用的一种数据类型。 运用指针编程是C语言最主要的风格之一。利用指针变量可以表示各种数据结构; ...
    朱森阅读 8,827评论 3 44
  • 第一章 Nginx简介 Nginx是什么 没有听过Nginx?那么一定听过它的“同行”Apache吧!Ngi...
    JokerW阅读 32,923评论 24 1,002
  • 1. C++基础知识点 1.1 有符号类型和无符号类型 当我们赋给无符号类型一个超出它表示范围的值时,结果是初始值...
    Mr希灵阅读 18,101评论 3 82
  • ▼ 时光流转,加入简书写作仿佛还在昨天,不过一眨眼,已经到了一个月的收梢。 回顾这30天,我感慨万千,邂逅简书,对...
    熊猫女侠阅读 5,054评论 38 51

友情链接更多精彩内容