错误:从 'const char*' 到 'char*' 的转换无效 [-允许]
error: invalid conversion from 'const char*' to 'char*' [-fpermissive]
以下代码中的赋值C=R.c_str();
会导致 G++ 引发以下错误:
错误:从"常量字符*"到"字符*"[-允许]的转换无效">
#include <iostream>
#include <string>
using namespace std;
int main()
{
string R = "killme";
char *C = new char[100];
C=R.c_str();
cout<<*C;
}
为什么这是一个错误,我该如何解决它?
代码有两个问题。导致编译问题的主要原因是将c_str()
结果(const
(分配给变量 C
,这是不const
的。编译器将此标记为错误,否则您可以执行以下操作:
C=R.c_str();
C[2] = 'c';
这将写入内存中的只读区域,从而导致未定义的行为。
您可以通过两种方式修复它:
- 声明
C
为const
,即const char *C = ...
或 - 将内容复制到已分配的空间中。
第一种方法很简单 - 你这样做:
const char *C = R.c_str();
第二种方法的工作方式如下:
char *C = new char[R.size()+1];
std::strcpy(C, R.c_str());
第二个问题是内存泄漏:您的代码C
分配 new
的结果,但从不删除它。如果使用strcpy
方法,则需要添加
delete[] C;
在程序结束时,一旦您使用完变量C
.
我也有同样的问题。看看它是否有效:
string R= "killme";
char * cstr = new char [R.length()+1];
strcpy (cstr, R.c_str());
为此,您必须包含两个库:
#include<string.h>
#include<cstring>
字符串::c_str(( 返回常量字符*而不是字符*。这是错误的原因。
有关 std::string::c_str(( 的更多信息,请参阅链接:http://www.cplusplus.com/reference/string/string/c_str/
是的,上面提到的两点也是正确的。
相关文章:
- 将 const 转换为 const char* 无效,我该如何解决?使用 gcc7 时失败
- 类型"int"和"const char [15]"到二进制"运算符<<"的无效操作数^
- 错误:从'void*'到'const uint8_t* {aka const unsigned char*}'的转换无效 [-允许]
- 错误:从 'char' 到 'const char' [-允许] strcat(加密,密钥[i])的转换无效;
- C++ - 从 "int" 到 "unsigned char" 的缩小转换无效
- 错误:AES 加密密钥:从"char*"到"无符号字符"的转换无效
- 无法确定为什么函数调用中从 char* 到 char 的无效转换
- 我收到一个错误无效的操作数,类型为 const char [42] 和二进制"运算符+"的双倍数
- 在 sprintf 中从 'signed char*' 到 'char*' 的转换无效
- 在这个简单函数中从'char'到'const char*'的无效转换
- 'const char [26]' 和 'LPSTR ' 类型的无效操作数
- C++从 'const char*' 到 'char*' Arduino Uno 的无效转换
- 如何修复C++中的"错误:从'int'到'const char*'[-fallowive]的无效转换?
- 将文本文件读取为 const char* 有时有效,有时无效
- C++:"错误:类型'const char*'和'const char [28]'的操作数无效到二进制'ope
- C++错误:从"char"到"const char*"的转换无效[-允许]
- 从'const char**'到'char* const*'的转换无效
- 从 'char' 到 'char*' strcat 函数的转换无效
- 使用表达式初始化char*无效
- 简单的 int 到字符串转换..int to const char* 无效