CString、char*、string三者的轉換

轉載於:https://www.cnblogs.com/bluestorm/p/3168720.html

這三種類型各有各的優點,比如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 * 就可以了

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章