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