无法从 'const char [3]' 转换为 'char *' x100000 (Qt Creator C++ Windows 32)
cannot convert from 'const char [3]' to 'char *' x100000 (Qt 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";
我至少有一个星期没有碰过错误所在的文件了。我通常会说我不小心更改了编译参数或其他内容,但在它开始出错之前我还没有打开设置。
有什么想法吗?我一定是心不在焉地更改了一些设置,但我真的不记得当时在想 "uh oh what did I just do?"
当你使用这样的代码时
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++ 首次标准化以来,字符串文字的类型为 char const[N]
。此时 C 不支持 const
并且许多代码将字符串文字分配给 char*
。因此,C++ 中出现了一条特殊规则,允许从字符串文字中初始化 char*
。此规则立即被弃用。
C99 也引入了一个 const
关键字。当 C++11 被标准化时,不推荐使用的规则被取消,并且从字符串文字初始化 char*
并不是非法的,因为它应该是正确的。预期是 C++ 编译器多年来就已弃用的赋值发出警告(所有供应商都表示他们这样做了),即用户有多年的准备时间来修复他们的代码。
明显的解决方法是从字符串文字初始化 char const*
而不是 char*
。
如果您确实需要一个指向 char
的可变数组的指针,您可以创建它并使用
对其进行初始化
char array[] = "string literal";
就在五分钟前,当我点击 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";
我至少有一个星期没有碰过错误所在的文件了。我通常会说我不小心更改了编译参数或其他内容,但在它开始出错之前我还没有打开设置。
有什么想法吗?我一定是心不在焉地更改了一些设置,但我真的不记得当时在想 "uh oh what did I just do?"
当你使用这样的代码时
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++ 首次标准化以来,字符串文字的类型为 char const[N]
。此时 C 不支持 const
并且许多代码将字符串文字分配给 char*
。因此,C++ 中出现了一条特殊规则,允许从字符串文字中初始化 char*
。此规则立即被弃用。
C99 也引入了一个 const
关键字。当 C++11 被标准化时,不推荐使用的规则被取消,并且从字符串文字初始化 char*
并不是非法的,因为它应该是正确的。预期是 C++ 编译器多年来就已弃用的赋值发出警告(所有供应商都表示他们这样做了),即用户有多年的准备时间来修复他们的代码。
明显的解决方法是从字符串文字初始化 char const*
而不是 char*
。
如果您确实需要一个指向 char
的可变数组的指针,您可以创建它并使用
char array[] = "string literal";