1. 程式人生 > >String中c_str()、data()、copy(p,n)函式的用法

String中c_str()、data()、copy(p,n)函式的用法

轉載自;http://blog.csdn.net/u010781856/article/details/46593625
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_str(); c_str()函式返回一個指向正規C字串的指標, 內容與本string串相同. 這是為了與c語言相容,在c語言中沒有string類型,故必須通過string類物件的成員函式c_str()把string 物件轉換成c中的字串樣式。 注意:一定要使用strcpy()函式 等來操作方法c_str()返回的指標 比如:最好不要這樣: char* c; string s="1234"; c = s.c_str(); //c最後指向的內容是垃圾,因為s物件被析構,其內容被處理(糾正:s物件的析構是在對指標c完成賦值操作之後進行的,故此處並沒有錯誤) 在vc++2010中提示的錯誤原因:

vc++2010中提示的錯誤原因 應該這樣用: char c[20]; string s="1234"; strcpy(c,s.c_str()); 這樣才不會出錯,c_str()返回的是一個臨時指標,不能對其進行操作 c_str()返回的是一個分配給const char*的地址,其內容已設定為不可變更,如果再把此地址賦給一個可以變更內容的char*變數,就會產生衝突,在2010中是不被允許的。但是如果放入函式呼叫,或者直接輸出,因為這些函式和輸出都是把字串指標作為 const char*引用的,所以不會有問題。 例(2) c_str() 以const char* 型別返回 string 內含的字串 如果一個函式要求char*引數,可以使用c_str()方法: string s = "Hello World!"; printf("%s", s.c_str()); //輸出 "Hello World!" c_str在開啟檔案時的用處: 當需要開啟一個由使用者自己輸入檔名的檔案時,可以這樣寫:ifstream in(st.c_str());。其中st是
string類
型,存放的即為使用者輸入的檔名。