關於string.c_str()的那點事

轉載自 http://blog.csdn.net/xiaoniba10631/article/details/6705214

  1. <span style="font-size:16px;">  string s("abc");  
  2.     const char* b = s.c_str();  
  3.     s.append("def");  
  4.     cout << b << endl;</span>  

輸出:abcdef
本來我想直接使用返回的一個與s內容相同的字符串,但是對s追加東西的時候,b所指向的字符串的內容也改變了。所以我們來看看c_str()到底做了什麼!

語法: 
const char *c_str();

c_str()函數返回一個指向正規C字符串的指針, 內容與本string串相同. 
這是爲了與c語言兼容,在c語言中沒有string類型,故必須通過string類對象的成員函數c_str()把string 對象轉換成c中的字符串樣式。


那麼這個指向正規C字符串的指針到底與string什麼關係呢?

它指向了其內部字符數組緩衝區!

並且返回一個const指針,這樣我們就不能夠根據這個指針來改變string的內容,保護了string的內容,所以說,c_str函數不是平白無故返回了一個const指針。

  1. <span style="font-size:16px;">void makeupper(char* array, int len)  
  2. {  
  3.    for(int i = 0; i < len; ++i)  
  4.       array[i] = toupper(array[i]);  
  5. }  
  6.   
  7. makeupper(&s[0], s.length());</span>  

輸出:abcdef

由此可見不能直接利用c_str返回的字符串,要利用strcpy等函數進行復制後再使用,不然很危險!


發佈了13 篇原創文章 · 獲贊 0 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章