CString,string,char*之間的轉(zhuǎn)換(轉(zhuǎn))這三種類型各有各的優(yōu)點(diǎn),比如CString比較靈活,,是基于MFC常用的類型,,安全性也最高,但可移植性最差,。string是使用STL時(shí)必不可少的類型,,所以是做工程時(shí)必須熟練掌握的;char*是從學(xué)習(xí)C語言開始就已經(jīng)和我們形影不離的了,,有許多API都是以char*作為參數(shù)輸入的,。所以熟練掌握三者之間的轉(zhuǎn)換十分必要。以下我用簡(jiǎn)單的圖示指出三者之間的關(guān)系,,并以標(biāo)號(hào)對(duì)應(yīng)轉(zhuǎn)換的方法,。 1 string to CString CString.format("%s",string.c_str()); 2 CString to string string str(CString.GetBuffer(str.GetLength())); 3 string to char * char *p=string.c_str(); 4 char * to string string str(char*); 5 CString to char * strcpy(char,CString,sizeof(char)); 6 char * to CString CString.format("%s",char*); CString的format方法是非常好用的。string的c_str()也是非常常用的,,但要注意和char *轉(zhuǎn)換時(shí),,要把char定義成為const char*,這樣是最安全的,。 以上函數(shù)UNICODE編碼也沒問題:unicode下照用,,加個(gè)_T()宏就行了,像這樣子_T("%s") 補(bǔ)充: CString 可能是 CStringW/CStringA,在與 string 轉(zhuǎn)換時(shí),,如果是 CStringW,,還涉及編碼轉(zhuǎn)換問題,。下面以 CStringA 來說明。 1 string to CString CString.format("%s",string.c_str()); CStringA = string.c_str() 就可以了 2 CString to string string str(CString.GetBuffer(str.GetLength())); GetBuffer 有參數(shù)的話,,可能導(dǎo)致內(nèi)部的分配空間動(dòng)作,,要進(jìn)行后續(xù) ReleaseBuffer 操作。 string = CStringA string = CStringA.GetBuffer(); 3 string to char * char *p=string.c_str(); 4 char * to string string str(char*); 5 CString to char * strcpy(char *,CString,sizeof(char)); 按照 3 風(fēng)格,,這里應(yīng)該 char * = CStringA; 或者 char *p = CStringA.GetBuffer(); 6 char * to CString CStringA = char * 就可以了 |
|