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

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

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

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


当前回答

没有人提到过sprintf?

std::string s;
char * c;
sprintf(c, "%s", s.c_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")

或者,你可以使用向量来获得一个可写的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  

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

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

orlp的char*答案的安全版本使用unique_ptr:

std::string str = "string";
auto cstr = std::make_unique<char[]>(str.length() + 1);
strcpy(cstr.get(), str.c_str());

使用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结尾。