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

新手上路,请多包涵

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

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

原文由 Roy Dai 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 583
1 个回答

代码有两个问题。 The main one, which causes a compile issue, is the assignment of c_str() result, which is const , to variable C , which is not const .编译器将此标记为错误,否则您可以这样做:

 C=R.c_str();
C[2] = 'c';

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

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

  • 声明 C a 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 完成。

原文由 Sergey Kalinichenko 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题