转换为(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();