转换为(const)char

为了获得 const char*访问 std::string 的数据,你可以使用字符串的 c_str() 成员函数。请记住,只要 std::string 对象在范围内并保持不变,指针才有效,这意味着只能在对象上调用 const 方法。

Version >= C++ 17

data() 成员函数可用于获得可修改的 char*,可用于操作 std::string 对象的数据。

Version >= C++ 11

也可以通过取第一个字符的地址来获得可修改的 char*&s[0]。在 C++ 11 中,这可以保证产生格式良好的以 null 结尾的字符串。请注意,即使 s 为空,&s[0] 也是格式正确的,而如果 s 为空则 &s.front() 未定义。

Version >= C++ 11

std::string str("This is a string.");
const char* cstr = str.c_str(); // cstr points to: "This is a string.\0"
const char* data = str.data();  // data points to: "This is a string.\0"
std::string str("This is a string.");

// Copy the contents of str to untie lifetime from the std::string object
std::unique_ptr<char []> cstr = std::make_unique<char[]>(str.size() + 1);

// Alternative to the line above (no exception safety):
// char* cstr_unsafe = new char[str.size() + 1];

std::copy(str.data(), str.data() + str.size(), cstr);
cstr[str.size()] = '\0'; // A null-terminator needs to be added

// delete[] cstr_unsafe;
std::cout << cstr.get();