MFC中CString,string,char之間的轉換


學過MFC開發的人都知道,這三種類型各有各的優點,比如CString比較靈活,是基於MFC常用的類型,安全性也最高,但可移植性最差。string是使用STL時必不可少的類型,所以是做工程時必須熟練掌握的;char*是從學習C語言開始就已經和我們形影不離的了,有許多API都是以char*作為參數輸入的。所以熟練掌握三者之間的轉換十分必要。

以下我用簡單的圖示指出三者之間的關系,並以標號對應轉換的方法。

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 *轉換時,要把char定義成為const char*,這樣是最安全的。 以上函數UNICODE編碼也沒問題:unicode下照用,加個_T()宏就行了,像這樣子_T("%s") 補充:CString 可能是 CStringW/CStringA,在與 string 轉換時,如果是 CStringW,還涉及編碼轉換問題。下面以 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 有參數的話,可能導致內部的分配空間動作,要進行后續 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 風格,這里應該 char *  = CStringA; 或者 char *p = CStringA.GetBuffer();6 char * to CString
CStringA = char * 就可以了

交流QQ:627719396

注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2020 ITdaan.com