欢迎莅临阿Q的项目

专业WP商业设计开发销售中心

CString、LPCTSTR、LPTSTR、TCHAR、WCHAR、string、wchar_t、char解析

现对于其他高级语言而言,C/C++的char操作超级麻烦,以下是我从网络收集的对各种字符串的说明和转换操作,以便在工作中查询。

二、相互转化

既然有定义了这么多的数据类型,所以他们之间的相互转化是少不了的。

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()的安全版本。

如果喜欢本文,请分享给朋友们