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

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

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

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


当前回答

你可以使用迭代器。

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

祝你好运。

其他回答

为了完整起见,不要忘记std::string::copy()。

std::string str = "string";
const size_t MAX = 80;
char chrs[MAX];

str.copy(chrs, MAX);

std::string::copy()不终止NUL。如果你需要确保在C字符串函数中使用NUL终止符:

std::string str = "string";
const size_t MAX = 80;
char chrs[MAX];

memset(chrs, '\0', MAX);
str.copy(chrs, MAX-1);

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

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

下面是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

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

这个也可以

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;