初学VC的时候经常被VC里头的各种字符串定义搞糊涂了,没办法的时候就直接使用CString了反正,这个类总能处理的。后来随着用得多了,渐渐得明白过来,那些字符串设置还是蛮有道理的。
先来看看最简单的:
CHAR
这个类型是最简单的字符串了,就是一个字节表示一个字符的那种,不过你可别小看它,先弄懂它别的就好说了。接下来我们看看它的两个“变种”
LPSTR
在VC里头这个字符串实际上就是CHAR*,注意如果你把它作为参数传给某个函数的话,就表示它所代表的字符串可以被函数改变。这一点很重要,也就是说LPSTR可以作为传出参数[in]使用。
LPCSTR
在VC里头这个字符串表示const CHAR*,也就是说它是个常量,如果作为参数传递个函数,它所表示的字符串的值是不能变的,也就是说它只能作为传入[out]参数使用。
请认真比较上面的一些区别,在下面的字符串中,几乎都是这样划分的。
WCHAR
这个比较容易理解,就是使用两个字节表示一个字符的那种,如果咱们把项目定义为UNICODE的话,所有字符串都是这个了。同样的它也有两个变形LPWSTR和LPCWSTR。
TCHAR
这个字符串最经常使用。为什么呢?因为VC为了大家的方便,比如你想把项目从ANSI(单字节)改为UNICODE(双字节),如果你用的是TCHAR那么就不用着急了。VC会自动为你转换。
说到底TCHAR就是你在没有定义项目是UNICODE之前它就是了CHAR,否则它就是WCHAR。就这么简单。
现在就能理解LPTSTR和LPCTSTR是什么意思了吧。
这里权作抛砖引玉,要是有任何不对的地方,欢迎大家批评指正哦。
下次有空,咱们来谈谈这几种字符串这间的转换为题。对了还有一种类型是BSTR,在COM中经常使用,咱们也在下次讨论吧。
******************************************************************************
******************************************************************************
******************************************************************************
c语言字符类型:
char 操作函数: strxxx
wchar_t 操作函数: wcsxxx
TCHAR 操作函数: _tcsxxx
windows字符类型:
CHAR CHAR* LPSTR LPCSTR
WCHAR WCHAR* LPWSTR LPCWSTR
TCHAR TCHAR* LPTSTR LPCTSTR
OLECHAR OLECHAR* BSTR
char CHAR 单字节字符
wchar_t WCHAR Unicode字符
TCHAR 当定义了UNICODE标志时表示WCHAR, 否则为CHAR
OLECHAR com中使用的字符类型, 实现为WCHAR
******************************************************************************
******************************************************************************
******************************************************************************
总结以下处理字符串可用的资源:
最常用的字符串操作宏
_T _TEXT TEXT
TCHAR str[] = TEXT("hello world");
UNICODE字符串的表示法:
WCAHR str[] = L"hello world";
atl转换宏:
A2W
OLE2A ...
c字符串操作函数
strxxx wcsxxx _tcsxxx
windows字符串操作函数
StrCpy ... (shell string function)
lstrcpy ... (window标准字符串函数)
SysAllocString SysFreeString ... (处理BSTR的特殊字符串函数)
字符串封装类
bstr_t CComBSTR (两个BSTR包装类)
CString (MFC字符串类,这个不用说了)
string (实际是basic_string<char>, stl字符串类)
wstring (实际是basic_string<wchar_t>, stl宽字符串类)
******************************************************************************
******************************************************************************
******************************************************************************