【C++】stringstream的str() 和 string的c_str()


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 會被析構,返回的指針指向了無效區域。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM