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

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

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

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


当前回答

If you just want a C-style string representing the same content: char const* ca = str.c_str(); If you want a C-style string with new contents, one way (given that you don't know the string size at compile-time) is dynamic allocation: char* ca = new char[str.size()+1]; std::copy(str.begin(), str.end(), ca); ca[str.size()] = '\0'; Don't forget to delete[] it later. If you want a statically-allocated, limited-length array instead: size_t const MAX = 80; // maximum number of chars char ca[MAX] = {}; std::copy(str.begin(), (str.size() >= MAX ? str.begin() + MAX : str.end()), ca);

string不会隐式转换为这些类型,原因很简单,需要这样做通常是一种设计风格。确保你真的需要它。

如果你确实需要一个char*,最好的方法可能是:

vector<char> v(str.begin(), str.end());
char* ca = &v[0]; // pointer to start of vector

其他回答

它不会自动转换(感谢上帝)。您必须使用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);

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

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

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

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

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

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

你可以使用迭代器。

std::string str = "string";
std::string::iterator p=str.begin();
char* chr = &(*p);

祝你好运。

下面是Protocol Buffer的一个更健壮的版本

char* string_as_array(string* str)
{
    return str->empty() ? NULL : &*str->begin();
}

// test codes
std::string mystr("you are here");
char* pstr = string_as_array(&mystr);
cout << pstr << endl; // you are here