我想将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();

其他回答

这个也可以

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;  

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

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

或者,你可以使用向量来获得一个可写的char*,如下所示;

//this handles memory manipulations and is more convenient
string str;
vector <char> writable (str.begin (), str.end) ;
writable .push_back ('\0'); 
char* cstring = &writable[0] //or &*writable.begin () 

//Goodluck