string.c_str是Borland封裝的String類中的一個函數,它返回當前字符串的首字符地址。
c_str函數的返回值是const char*的,不能直接賦值給char*。
c++語言提供了兩種字符串實現,其中較原始的一種只是字符串的
c語言
實現。與C語言的其他部分一樣,它在c++的所有實現中可用,我們將這種實現提供的字符串對象,歸為c-串,每個c-串char*類型的。
標准頭文件<cstring>包含操作c-串的函數庫。這些
庫函數
表達了我們希望使用的幾乎每種字符串操作。 當調用
庫函數
,客戶程序提供的是
string類
型參數,而
庫函數
內部實現用的是c-串,因此需要將string對象,轉化為char*對象,而c_str()提供了這樣一種方法,它返回const char*類型(可讀不可改)的指向字符
數組
的
指針
。
注:
①這個數組的數據是臨時的,當有一個改變這些數據的成員函數被調用后,其中的數據就會失效。因此要么現用先轉換,要么把它的數據復制到用戶自己可以管理的內存中。注意。看下例:
const char* c; string s="1234"; c = s.c_str(); cout<<c<<endl; //輸出:1234 s="abcd"; cout<<c<<endl; //輸出:abcd
上面如果繼續用c指針的話,導致的錯誤將是不可想象的。就如:1234變為abcd
其實上面的c = s.c_str(); 不是一個好習慣。既然c指針指向的內容容易失效,我們就應該按照上面的方法,那怎么把數據復制出來呢?這就要用到strcpy等函數(推薦)。
注意:不能再像上面一樣①所示了,const還怎么向里面寫入值啊;也不能②所示,使用了未初始化的局部變量“c”,運行會出錯的 。