二、相互转化
既然有定义了这么多的数据类型,所以他们之间的相互转化是少不了的。
A):CString的转化
1.CString和LPCTSTR的转化:
CString和LPCTSTR不需要转化,两者是等价的,所以:
[syntaxHighLighter brush="c"]CString str("cstring");
LPCTSTR pcStr = str;[/syntaxHighLighter]
2.CString和LPTSTR的转化:
下述转法虽然可以,但是却不安全:
[syntaxHighLighter brush="c"]CString str("string");
LPTSTR pStr = (LPTSTR)(LPCTSTR)(str);[/syntaxHighLighter]
因为本来转化后的字符串变得可以修改了,造成了安全隐患。
正确的转化方法为:
[syntaxHighLighter brush="c"]CString str("string");
LPTSTR pStr = str.GetBuffer();
str.ReleaseBuffer();[/syntaxHighLighter]
注意:GetBuffer()和ReleaseBuffer()之间不可以调用任何的CString函数,比如GetLength()函数,因为无法预测对内存的操作,所以任何CString函数得到的结果都是不确定的。
3.CString和WCHAR*(wchar_t*)的转化
方法一:使用wcscpy()函数
[syntaxHighLighter brush="c"]CString str("string");
WCHAR pWchar[100];
wcscpy(pWchar,str);[/syntaxHighLighter]
方法二:使用wcscpy_s()函数
这个函数是上一个函数的安全版本,调用上一个函数如果pWchar的内存不足时,容易引发意味的错误,但是wcscpy_s()则不会,应该其内存大小已经指定出来了:
[syntaxHighLighter brush="c"]CString str("string");
WCHAR pWchar[100];
wcscpy(pWchar,100,str);[/syntaxHighLighter]
方法三:使用_tcscpy()函数
[syntaxHighLighter brush="c"]CString str("string");
WCHAR pStr[100];
_tcscpy(pStr,str);[/syntaxHighLighter]
方法四:使用_tcscpy_s()函数
同wcscpy_s()一样,_tcscpy_s()函数也是_tcscpy()函数的安全版本:
[syntaxHighLighter brush="c"]CString str("string");
WCHAR pStr[100];
_tcscpy_s(pStr,100,str);[/syntaxHighLighter]
4.CString和char*的转化
方法一:使用wcstombs()函数
[syntaxHighLighter brush="c"]CString str("string");
char pChar[100];
wcstombs(pChar,str,100);[/syntaxHighLighter]
方法二:使用wcstombs_s()函数
同上面一样,wcstombs_s()是wcstombs()的安全版本。