轉載自 http://blog.csdn.net/xiaoniba10631/article/details/6705214
- <span style="font-size:16px;"> string s("abc");
- const char* b = s.c_str();
- s.append("def");
- 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指針。
- <span style="font-size:16px;">void makeupper(char* array, int len)
- {
- for(int i = 0; i < len; ++i)
- array[i] = toupper(array[i]);
- }
- makeupper(&s[0], s.length());</span>
輸出:abcdef
由此可見不能直接利用c_str返回的字符串,要利用strcpy等函數進行復制後再使用,不然很危險!