c_str() 來自百科

 c_str函數的返回值是const char*的,不能直接賦值給char*,所以就需要我們進行相應的操作轉化,下面就是這一轉化過程。
  c++語言提供了兩種字符串實現,其中較原始的一種只是字符串的c語言實現。與C語言的其他部分一樣,它在c++的所有實現中可用,我們將這種實現提供的字符串對象,歸爲c-串,每個c-串char*類型的。
  標準頭文件<cstring>包含操作c-串的函數庫。這些庫函數表達了我們希望使用的幾乎每種字符串操作。 當調用庫函數,客戶程序提供的是string類型參數,而庫函數內部實現用的是c-串,因此需要將string對象,轉化爲char*對象,而c_str()提供了這樣一種方法,它返回一個客戶程序可讀不可改的指向字符數組的指針。 例:
  #include <iostream>
  #include <string>
  using namespace std;
  void main()
  string add_to="hello!";
  //std::cout<<add_to<<endl;
  const string add_on="baby";
  const char*cfirst = add_to.c_str();
  const char*csecond = add_on.c_str();
  char*copy = new char[strlen(cfirst) + strlen(csecond) + 1];
  strcpy( copy, cfirst);
  std::cout<<copy<<endl;
  //strcat( copy, csecond);
  add_to = copy;
  delete [] copy;
  std::cout<<add_to<<std::endl;
  簡單的例子:
  const char *c_str();
  c_str()函數返回一個指向正規C字符串的指針, 內容與本string串相同.
  這是爲了與c語言兼容,在c語言中沒有string類型,故必須通過string類對象的成員函數c_str()把string 對象轉換成c中的字符串樣式。
  注意:一定要使用strcpy()函數 等來操作方法c_str()返回的指針
  比如:最好不要這樣:
  char* c;
  string s="1234";
  c = s.c_str(); //c最後指向的內容是垃圾,因爲s對象被析構,其內容被處理(糾正:s對象的析構是在對指針c完成賦值操作之後進行的,故此處並沒有錯誤)
  應該這樣用:
  char c[20];
  string s="1234";
  strcpy(c,s.c_str());
  這樣纔不會出錯,c_str()返回的是一個臨時指針,不能對其進行操作
  再舉個例子
  c_str() 以 char* 形式傳回 string 內含字符串
  如果一個函數要求char*參數,可以使用c_str()方法:
  string s = "Hello World!";
  printf("%s", s.c_str()); //輸出 "Hello World!"
  c_str在打開文件時的用處:
  當需要打開一個由用戶自己輸入文件名的文件時,可以這樣寫:ifstream in(st.c_str());。其中st是string類型,存放的即爲用戶輸入的文件名。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章