一切正常工作,就在五分钟前,当我点击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和准备堆栈
/ 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] 举报,一经查实,本站将立刻删除。