c++ string.c_str()小結
c++
{
string var = "Olympic";
char *ptr = var.c_str();
}//還不能被編譯,因為va.c_str()返回臨時指針,賦值給ptr之后,在}結束之后,var對象就得析構,最后要使用ptr,就是垃圾內容
一,C語言的字符串
在C語言里,對字符串的處理一項都是一件比較痛苦的事情,因為通常在實現(xiàn)字符串的操作的時候都會用到最不容易駕馭的類型——指針。
比如下面這個例子:
//example 1:
char str[12] = "Hello";
char *p = str;
*p = 'h'; //改變第一個字母
//example 2:
char *ptr = "Hello";
*ptr = 'h'; //錯誤
第一個字符串時用數(shù)組開辟的,它是可以改變的變量。而第二個字符串則是一個常量,也就是字面值。ptr只是指向它的指針而已,而不能改變指向的內容。
要想通過指針來改變常量是錯誤,正確的寫法應該是用const指針。
const char *ptr = "Hello";
二,初識string類
正是因為C風格字符串(以空字符結尾的字符數(shù)組)太過復雜難于掌握,不適合大程序的開發(fā),所以C++標準庫定義了一種string類,定義在頭文件<string>。注意<string.h>和<cstring>都是錯誤的,這兩個頭文件主要定義C風格字符串操作的一些方法,譬如strlen(), strcpy()等。第一個是C的頭文件格式,而第二個是C++風格的頭文件,但是和<string.h>是一樣的,它的目的是為了和C兼容。
看下面例子:
//example 3:
string str("world"); //可以用C風格字符串初始化
string words = "Hello";
string greet = words;
string join = greet + words; //可以像基本類型一樣操作
*博客內容為網(wǎng)友個人發(fā)布,僅代表博主個人觀點,如有侵權請聯(lián)系工作人員刪除。