以下代码中的赋值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;
}
为什么这是一个错误,我该如何解决?
答案 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/
是的,上述两点都是正确的。