错误:从 'const char*' 到 'char*' 的转换无效 [-允许]

error: invalid conversion from 'const char*' to 'char*' [-fpermissive]

本文关键字:char 无效 允许 转换 const 错误      更新时间:2023-10-16

以下代码中的赋值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';

这将写入内存中的只读区域,从而导致未定义的行为。

您可以通过两种方式修复它:

  • 声明Cconst,即 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/

是的,上面提到的两点也是正确的。