String中c_str()的用法


   
   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 char* c; //① 
//char* c;       //② 
//char c[20];  
char* c=new char[20]; 
string s="1234"; 
//c = s.c_str();  
strcpy(c,s.c_str()); 
cout<<c<<endl; //輸出:1234 
s="abcd"; 
cout<<c<<endl; //輸出:1234 

注意:不能再像上面一樣①所示了,const還怎么向里面寫入值啊;也不能②所示,使用了未初始化的局部變量“c”,運行會出錯的 。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM