字符串常量赋值和编译器问题

weihua506966845 2018-03-22 11:47:38
用的是VS2017
发现用字符串常量给char *赋值会报错
比如 char *a = "hello" 很简单的一句话输出a时会提出报错
说是“初始化”: 无法从“const char [6]”转换为“char *”
然后我在char前面加个const就可以正常的通过 确实可以理解为字符串常量是const不能让char *指向他
但是以前一直是不加const就可以成功赋值 突然来这么一出有点不适应 不知道为什么要做这个修改

朋友用VS2015就可以正常赋值 这是编译器的问题吗
...全文
287 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2018-03-23
  • 打赏
  • 举报
回复
不要纠结各种常量了,这个世界上唯一不变的就是变化。用API WriteProcessMemory还能修改正运行的其它进程的内存里面的所谓常量呢! http://edu.csdn.net/course/detail/2344 C语言指针与汇编内存地址-一.代码要素
srhouyu 2018-03-22
  • 打赏
  • 举报
回复
编译器对你把指向字符串常量的指针弄成非const的可能并没有什么意见,能够正常编译。要知道,C语言最早时候根本没有const关键字。但如果编译器现在限制你必须用const也未尝不可。 通常来说,字符串常量在内存中都是位于只读区的,若是你企图利用指针a去修改字符串中的某个字符,程序会报错。
paschen 版主 2018-03-22
  • 打赏
  • 举报
回复
正常是需要加const,之所以之前允许这样语法是因为历史遗留原因,你可以在VS2017项目属性里把符合模式改为否则可正常编译此代码
Saleayas 2018-03-22
  • 打赏
  • 举报
回复
这是 C 语言的一个历史问题。 以前没有这么严格。
linux_hsylar 2018-03-22
  • 打赏
  • 举报
回复
VS2017还这么搞,以前版本没这种问题
AlbertS 2018-03-22
  • 打赏
  • 举报
回复
你用一个char* a去指向一个常量,那么逻辑上不能保证你不修改a所指向的值,所以编译器会报错,如果改成const char* a,就不能通过一般方法来改变a所指向的值了,所以编译可以通过!

64,652

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧