我想将std::string转换为char*或char[]数据类型。
std::string str = "string";
char* chr = str;
结果:"错误:不能转换' std::string '到' char '…"
有什么方法可以做到这一点?
我想将std::string转换为char*或char[]数据类型。
std::string str = "string";
char* chr = str;
结果:"错误:不能转换' std::string '到' char '…"
有什么方法可以做到这一点?
当前回答
假设你只需要一个c风格的字符串作为输入传递:
std::string str = "string";
const char* chr = str.c_str();
其他回答
更多细节在这里,还有这里,但你可以用
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*
下面是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
OOP风格的转换
converter.hpp
class StringConverter {
public: static char * strToChar(std::string str);
};
converter.cpp
char * StringConverter::strToChar(std::string str)
{
return (char*)str.c_str();
}
使用
StringConverter::strToChar("converted string")
使用c_str()成员函数从std::string对象中获取const char *类型:
std::string str = "string";
const char* chr = str.c_str();
要从std::string中获得非const char *,可以使用data()成员函数,该函数从c++ 17开始返回一个非const指针:
std::string str = "string";
char* chr = str.data();
对于该语言的旧版本,您可以使用范围构造将字符串复制到一个vector中,从中可以获得非const指针:
std::string str = "string";
std::vector<char> str_copy(str.c_str(), str.c_str() + str.size() + 1);
char* chr = str_copy.data();
但要注意,这不会让你修改包含在str中的字符串,只有副本的数据可以这样改变。请注意,在旧版本的语言中使用c_str()是特别重要的,因为当时std::string在调用c_str()之前不能保证以null结尾。