MFC使用CString類提供了對字符串的支持。CString類可以單獨應用於MFC框架的其他部分,因爲他不是由CObject類派生的,但與大多數MFC對象一樣,CString對象可以序列化。CString對象具有如下特性。
- 可以使用CString對象任意替換Const char* 和LPCTSTR類型的函數參數。
- CString對象遵循“值語義”,應將Cstring看做是一個真實的字符串而不是指向字符串的指針。
- 通過轉換操作符,可以直接訪問該字符串的字符,就像訪問一個只讀字符數組一樣。
- CString大小可變,可以作爲連接操作的結果而增大。
CString對象的內存分配
CString對象提供了動態內存分配,它是通過“引用”機制來管理分配的內存塊。實際上CString對象只有一個指針成員變量,所以任何CString實例的長度只有4字節,即:
int len =sizeof(CString); //len=4
CString 類型轉換
1、數值轉換爲字符
可以調用CString對象的Format方法格式化字符,如下面的代碼:
CString str;
float f = 123.354;
str.Format(_T("顯示浮點數:%f"),f);
2、CString轉換爲int
CString str("354");
itn iTemp = atoi(str);
如果準備使用Unicode字符,則應該使用_ttoi()函數,它在ANSI編碼系統中被編譯成_atoi(),在Unicode編碼系統中編譯成_wtoi(),如下面的代碼:
CString str(_T("352"));
int iTemp = _ttoi(str);
CString 和char*相互轉換
char* 轉爲CString非常簡單:
char* p="this is a test";
CString s = p; //還可以表示爲CString s(p);
CString 轉爲char*有下面幾種方法
(1)、使用GetBuffer函數
char *p;
CString str="hello";
p = str.getBuffer(str.GetLength());
str.ReleaseBuffer();
(2)、使用memcpy函數
CString mCS =_T("cxl");
char mch[20];
memcpy(mch,mCS,mCS.GetLength());
(3)、使用LPCTSTR強制類型轉換
char* ch;
CString str = _T("cxl");
ch = (LPSTR) (LPCTSTR) str;