轉換為(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();