【轉】MFC CStirng、CStringA、CStringW的使用
1.CString在多位元組環境下(未定義UNICODE)為CStringA,在Unicode環境下(定義有UNICODE)為CStringW。
2.對於涉及到char*與CStringA或CString轉換時最好使用CStringA而不要使用內部儲存結構不一定的CString,對wchar_t*與CStringW或CString同理。
3.CStringA在UNICODE環境下可以正確轉換為CString,同樣CString在UNICODE環境下轉換為CStringA:
CStringA strA = "漢字啊";
CString str;
str = strA; //注意這裡應呼叫賦值操作符過載函式,不能直接CString str = strA,因為會呼叫賦值建構函式而出錯
CString str2 = _T("也是漢字啊");
CStringA strA2;
strA2 = str2;
同理CStringW在多位元組環境下也可以正確轉換為CString,CString在多位元組環境下可正確轉換為CStringW:
CStringW strW = L"漢字啊";
CString str;
str = strW;
CString str2 = "也是漢字啊";
CStringW strW2;
strW2 = str2;
3.對於CStringA轉換為const char*(注意const不能少)不要使用GetBuffer(),因為這樣會造成不必要的的記憶體分配,並且使用後還需要ReleaseBuffer();
其實CStringA可以通過operator LPSTR()操作符過載直接轉換為const char*:
CString str = “漢字”;//只能是CStringA或多位元組環境下的CString
const char* c_str = str;//直接轉換,正確。
對CStringW同理:
CString str = _T("漢字啊");
const wchar_t* c_str = str; //轉換正確
————————————————
版權宣告:本文為CSDN博主「Linux菜_鳥」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處連結及本宣告。
原文連結:https://blog.csdn.net/u011519892/article/details/17286587