我想将std::string转换为char*或char[]数据类型。

std::string str = "string";
char* chr = str;

结果:"错误:不能转换' std::string '到' char '…"

有什么方法可以做到这一点?


当前回答

char* result = strcpy((char*)malloc(str.length()+1), str.c_str());

其他回答

严格说来,您不能“将std::string转换为char*或char[]数据类型”。

正如其他答案所示,你可以将std::string的内容复制到一个char数组中,或者对std::string的内容创建一个const char*,这样你就可以以“C风格”访问它。

如果你试图改变std::string的内容,std::string类型有所有的方法来做任何你可能需要做的事情。

如果你试图将它传递给某个接受char*的函数,则有std::string::c_str()。

orlp的char*答案的安全版本使用unique_ptr:

std::string str = "string";
auto cstr = std::make_unique<char[]>(str.length() + 1);
strcpy(cstr.get(), str.c_str());

(这个答案只适用于c++ 98。)

请不要使用原始的char*。

std::string str = "string";
std::vector<char> chars(str.c_str(), str.c_str() + str.size() + 1u);
// use &chars[0] as a char*

更多细节在这里,还有这里,但你可以用

string str = "some string" ;
char *cstr = &str[0];

从c++ 11开始,还可以使用str.data()成员函数,该函数返回char *

string str = "some string" ;
char *cstr = str.data();

没有人提到过sprintf?

std::string s;
char * c;
sprintf(c, "%s", s.c_str());