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

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

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

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


当前回答

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

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

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

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

其他回答

(这个答案只适用于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*

它不会自动转换(感谢上帝)。您必须使用c_str()方法来获取C字符串版本。

std::string str = "string";
const char *cstr = str.c_str();

注意,它返回一个const char *;你不允许改变c_str()返回的c风格字符串。如果你想处理它,你必须先复制它:

std::string str = "string";
char *cstr = new char[str.length() + 1];
strcpy(cstr, str.c_str());
// do stuff
delete [] cstr;

或者在现代c++中:

std::vector<char> cstr(str.c_str(), str.c_str() + str.size() + 1);

如果我需要c++字符串内容的可变原始副本,那么我会这样做:

std::string str = "string";
char* chr = strdup(str.c_str());

后来:

free(chr); 

So why don't I fiddle with std::vector or new[] like anyone else? Because when I need a mutable C-style raw char* string, then because I want to call C code which changes the string and C code deallocates stuff with free() and allocates with malloc() (strdup uses malloc). So if I pass my raw string to some function X written in C it might have a constraint on it's argument that it has to allocated on the heap (for example if the function might want to call realloc on the parameter). But it is highly unlikely that it would expect an argument allocated with (some user-redefined) new[]!

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

假设你只需要一个c风格的字符串作为输入传递:

std::string str = "string";
const char* chr = str.c_str();