c++ - 无法从 'const char [3]' 转换为 'char *' x100000 (Qt Creator C++ Windows 32)

标签 c++ windows qt 32-bit

就在五分钟前,当我点击 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";

我至少有一个星期没有碰过错误所在的文件了。我通常会说我不小心更改了编译参数或其他内容,但在它开始出错之前我还没有打开设置。

有什么想法吗?我一定是心不在焉地更改了一些设置,但我真的不记得当时在想“呃,哦,我刚刚做了什么?”

最佳答案

当你使用这样的代码时

char *astring2 = "some letters";

C++(和 C)将其放入只读存储器。您不能修改用文字初始化的 char 指针的内容,即使它不是 const。

此外,您不能更改指针的地址,因为根据上述规则,这会导致内存泄漏。

但是,除非您将其设置为常量,否则它不遵循该规则:

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

关于c++ - 无法从 'const char [3]' 转换为 'char *' x100000 (Qt Creator C++ Windows 32),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34244225/

相关文章:

c++ - 什么是 qobject_cast?

java - Qt 如何在 Android 上运行?

c++ - OpenCV 窗口卡住

qt - 带有 QT Creator 构建错误的 OpenCV

c++ - GetExtendedTcpTable 不会返回与 netstat -ano 相同的结果

windows - 为什么只有管理员权限才能在 Python 中导入某些模块?

c++ - 将文件从不同的文件夹复制到 C++ 中的特定位置

c++ boost asio超时以阻止连接

c++ - 如何最优雅地获取 std::vector 缓冲区的地址?

c++ - 为什么在rapidjson中调用赋值运算符后成员变量发生变化?