错误:来自' const char *'的无效转换到#char;' [-fpermissive]

时间:2017-02-13 02:56:36

标签: c++

以下代码中的赋值C=R.c_str();会导致G ++抛出以下错误:

  

错误:来自' const char *'的无效转换到#char;' [-fpermissive]"

#include <iostream>
#include <string>
using namespace std;

int main()
{
    string R = "killme";
    char *C = new char[100];
    C=R.c_str();
    cout<<*C;
}

为什么这是一个错误,我该如何解决?

3 个答案:

答案 0 :(得分:1)

代码有两个问题。导致编译问题的主要问题是将c_str()结果const分配给变量C,其中不是 {{1 }}。编译器将此标记为错误,否则您可以执行此操作:

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; ,在程序结束时

答案 1 :(得分:0)

我有同样的问题。看看是否有效:

string R= "killme";

char * cstr = new char [R.length()+1];
strcpy (cstr, R.c_str());

为此您必须包括两个库:

#include<string.h>
#include<cstring>

答案 2 :(得分:-1)

string :: c_str()返回一个const char *而不是char *。这就是错误的原因。

有关std :: string :: c_str()的更多信息,请参阅链接:http://www.cplusplus.com/reference/string/string/c_str/

是的,上述两点都是正确的。