分配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;
}
为什么这是一个错误?我该如何解决它?
该代码有两个问题。导致编译问题的主要原因是分配c_str()
结果,即const
, 到变量C
,即not const
。编译器将其标记为错误,否则您可以这样做:
C=R.c_str();
C[2] = 'c';
这将写入内存中的只读区域,从而导致未定义的行为。
您可以通过两种方式修复它:
- Declare
C
a const
, i.e. const char *C = ...
, or
- 将内容复制到您分配的空间中。
第一种方法很简单 - 您可以这样做:
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
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)