std::stringstream::str
// stringstream::str #include <string> // std::string #include <iostream> // std::cout #include <sstream> // std::stringstream, std::stringbuf int main () { std::stringstream ss; ss.str ("Example string"); std::string s = ss.str(); std::cout << s << '\n'; return 0; }
streamstring在調用str()時,會返回臨時的string對象。而因為是臨時的對象,所以它在整個表達式結束后將會被析構。
如果需要進一步操作string對象,先把其值賦給一個string變量后再操作。
std::string::c_str
// strings and c-strings #include <iostream> #include <cstring> #include <string> int main () { std::string str ("Please split this sentence into tokens"); char * cstr = new char [str.length()+1]; std::strcpy (cstr, str.c_str()); // cstr now contains a c-string copy of str char * p = std::strtok (cstr," "); while (p!=0) { std::cout << p << '\n'; p = std::strtok(NULL," "); } delete[] cstr; return 0; }
c_str()函數返回一個指向正規C字符串的指針常量, 內容與本string串相同.
這是為了與c語言兼容,在c語言中沒有string類型,故必須通過string類對象的成員函數c_str()把string 對象轉換成c中的字符串樣式。
1.c_str是一個內容為字符串指向字符數組的臨時指針;
2.c_str返回的是一個可讀不可改的常指針;
注意:一定要使用strcpy()函數 等來操作方法c_str()返回的指針
比如:最好不要這樣:
const char* func() { const char* c; string s="1234"; c = s.c_str(); return c; }
因為從func()函數退出后,s 會被析構,返回的指針指向了無效區域。