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;