微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

不能从'const char '转换为'char *'x100000Qt Creator C ++ Windows 32

一切正常工作,就在五分钟前,当我点击f5并得到102错误

error: C2440: 'initializing' : cannot convert from 'const char [17]' to 'char *' Conversion from string literal loses const qualifier (see /Zc:strictStrings)

具体的是在30号线:

char* hexchars = "0123456789ABCDEF";

我还没有触及错误文件至less一个星期的文件。 我通常会说,我不小心改变了编译参数或东西的东西,但我没有打开设置,因为很多之前,它开始出现错误

有任何想法吗? 我一定心不在焉地改变了一些设定,但我实在记不住想:“呃,我刚刚做了什么?

如何将32位NTDLL结构转换为64位结构?

kernel32是否总是从System32加载?

内联汇编 – cdecl和准备堆栈

gcc:在32位平台上编译一个64位的二进制文件

/ usr / bin / ld:searchfoo时跳过不兼容的foo.so

TObject虚拟方法的签名更新至Delphi XE2

必须重新编译运行x32 ABI应用程序的内容

将32位dsn导入64位窗口服务器

VBS Windows 64位/ 32位registry读取问题

syscall或sybase在32位Linux上?

当你使用这样的代码

char *astring2 = "some letters";

c ++和c把它放到只读存储器中。 即使不是const,也不能修改文字初始化的char指针的内容

编辑:也不能改变指针的地址,因为它会导致内存泄漏由于上述规则

但是这并不遵循这个规则,除非你使它成为const

char astring[] = "some letters that can be changed"; char *ptrToString = astring; //work astring2 = astring //not work

希望这可以帮助。

字符串文字的类型是char const[N]因为C ++是第一次被标准化的。 在这一点上,C不支持const并且很多代码将字符串赋给char* 。 结果在C ++中存在一个特殊的规则,允许从字符串文字初始化char* 。 这个规则立即被弃用。

C99也引入了一个const关键字。 当C ++ 11被标准化时,不赞成使用的规则被取消,从字符串文本初始化一个char*是非法的,因为它应该是正确的。 期望的是,C ++编译器自从几年(和所有供应商表示他们这样做)警告了这个被弃用的任务,即用户有多年的时间来修复他们的代码

显而易见的解决方法是从字符串文字初始化char const*而不是char* 。

如果你真的需要一个指向char的可变数组的指针,你可以创建它并使用它初始化

char array[] = "string literal";

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐