欢迎来到天天文库
浏览记录
ID:8964715
大小:41.86 KB
页数:18页
时间:2018-04-13
《windows中的字符串类型》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、Windows字符串类型C++主要使用的是C-Style字符串,而M$在Windows中又增加了很多C-Style字符串的变体。这个一多嘛,就容易乱~ 所谓字符串,就是由字符组合而成,所以我们先来将将字符类型。 首先,存在两种最基本的字符类型:char和wchar_t。char大家都很熟悉了,我就跳过。至于wchar_t,是应用于UNICODE的宽字符,即一个字符2Bytes,16Bits。事实上,Windows中利用typedef unsigned short wchar_t定义wchar_t 然后为了书写方便(MS我也没觉得有多大差别)
2、,M$又把那两个基本字符类型重新的给他typedef了一遍,即:typedef char CHARtypedef wchar_t WCHAR为了使得兼容性更加,M$又定义了TCHAR数据类型:#ifdef UNIOCDE typedef WCHAR TCHAR#else typedef CHAR TCHAR#endif这样,你不用关心是要使用ANSI字符串还是Unicode,编译器会自动根据你的OS来选择。 然后,M$又利用上面的几种基本数据类型,定义了一些字符串指针类型。LPSTR和LPCSTR:LPSTR是指向以0结尾的ANSI字符串的
3、指针,后者是const指针typedef CHAR* LPSTRtypedef const CHAR* LPCSTRLPWSTR和LPCWSTR:LPWSTR是指向以0结尾的UNICODE字符串的指针,后者是const指针typedef WCHAR* LPWSTRtypedef const WCHAR* LPCWSTR同样,为了摆脱对ANSI还是UNICODE的选择麻烦,M$也增加了LPTSTR和LPCTSTR两个字符串指针类型。他们被如下定义:typedef TCHAR* LPTSTR#ifdef UNICODE typedef LPWSTR
4、 LPTSTR#else typedef LPSTR LPTSTR#endif/////////////////////////////////////typedef const TCHAR* LPCTSTR#ifdef UNICODE typedef LPCWSTR LPCTSTR#else typedef LPCSTR LPCTSTR#endifps:你会在某些地方看到存在PSTR/PWSTR/PTSTR等等,与上面的只却一个L的字符串指针类型。实际上,这个是长指针和短指针问题。LPXX是长指针,PXX是短指针。不过在32Bit的系统上
5、,二者已经没有区别。然后说说两个比较成熟好用的字符串类型:String和CStringString是C++的标准字符串,需要string(不带.h)头文件和std名字空间支持。CString是M$为MFC设计的字符串,功能更加强大,而且这玩意儿是安全的。需要atlstr.h文件和MFC DLL的支持。不过目前已经有人将此类型从MFC中分离~ 为了增强程序的通用性,还必须注意以下几点:1、既然程序里不能出现char,那表示字符串时,就不能再习惯性的用char*了。应该改为TCHAR*,或者是PTSTR。后一种是 windows的变量,类似的有:
6、PSTR、PTSTR、LPTSTR、LPSTR、PCTSTR等等等等。这也是让人一开始接触会头大的地方。其实并非如此恐怖,我以PCTSTR为例做个解释:P代表指针(和LP是一个东西,LP的本意是Long Pointer,16位windows时代的遗留物。),C代表const,T代表TCHAR,STR代表字符串。所以PCTSTR其实就是const TCHAR* 的意思。而PSTR也就是char* 的意思。所以我们在表示字符串时也不能使用PSTR等不带T的变量类型名。2、表示字符串常量时,不能简单的用双引号括起来,因为那代表ascii字符串。同样也不
7、能在前面加L,因为那代表unicode。我们的程序要做到的是通用性,即不是ascii也不是unicode。所以我们在字符串前应该加的是TEXT,比如MessageBox(NULL,TEXT("Fypher"),TEXT("FF"),MB_OK)。TEXT还可用于字符。比如TCHAR m=TEXT('A');3、TCHAR FF[50]。FF能装多少字符?哈!不要习惯性的sizeof(FF)了,应该_countof(FF)或者sizeof(FF)/sizeof(TCHAR)。因为我们不确定TCHAR到底是char 还是 wchar_t。4、该和一堆
8、老朋友说再见了……我们不能再使用以前的字符串处理函数或者字符处理函数了。比如strlen、strcat、strcmp等等等等……因为这些
此文档下载收益归作者所有