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

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

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

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


当前回答

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

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

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

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

其他回答

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

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

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

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

这个也可以

std::string s;
std::cout<<"Enter the String";
std::getline(std::cin, s);
char *a=new char[s.size()+1];
a[s.size()]=0;
memcpy(a,s.c_str(),s.size());
std::cout<<a;  

你可以使用迭代器。

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

祝你好运。

这可能是对bobobobo的回答的一个更好的评论,但我没有那个代表。它完成了同样的事情,但是使用了更好的实践。

虽然其他答案很有用,但如果你需要显式地将std::string转换为char*而不使用const, const_cast是你的朋友。

std::string str = "string";
char* chr = const_cast<char*>(str.c_str());

注意,这不会为您提供数据的副本;它会给你一个指向字符串的指针。因此,如果修改chr的一个元素,就会修改str。

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")