windows中的字符串类型.docxVIP

  1. 1、本文档共18页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
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我也没觉得有多大差别),M$又把那两个基本字符类型重新的给他typedef了一遍,即: typedef?char?CHAR typedef?wchar_t?WCHAR 为了使得兼容性更加,M$又定义了TCHAR数据类型: #ifdef?UNIOCDE ??typedef?WCHAR?TCHAR #else ??typedef?CHAR?TCHAR #endif 这样,你不用关心是要使用ANSI字符串还是Unicode,编译器会自动根据你的OS来选择。 ??然后,M$又利用上面的几种基本数据类型,定义了一些字符串指针类型。 LPSTR和LPCSTR:LPSTR是指向以0结尾的ANSI字符串的指针,后者是const指针 typedef?CHAR*?LPSTR typedef?const?CHAR*?LPCSTR LPWSTR和LPCWSTR:LPWSTR是指向以0结尾的UNICODE字符串的指针,后者是const指针 typedef?WCHAR*?LPWSTR typedef?const?WCHAR*?LPCWSTR 同样,为了摆脱对ANSI还是UNICODE的选择麻烦,M$也增加了LPTSTR和LPCTSTR两个字符串指针类型。他们被如下定义: typedef?TCHAR*?LPTSTR #ifdef?UNICODE ??typedef?LPWSTR?LPTSTR #else ??typedef?LPSTR?LPTSTR #endif ///////////////////////////////////// typedef?const?TCHAR*?LPCTSTR #ifdef?UNICODE ??typedef?LPCWSTR?LPCTSTR #else ??typedef?LPCSTR?LPCTSTR #endif ps:你会在某些地方看到存在PSTR/PWSTR/PTSTR等等,与上面的只却一个L的字符串指针类型。实际上,这个是长指针和短指针问题。LPXX是长指针,PXX是短指针。不过在32Bit的系统上,二者已经没有区别。 然后说说两个比较成熟好用的字符串类型:String和CString String是C++的标准字符串,需要string(不带.h)头文件和std名字空间支持。 CString是M$为MFC设计的字符串,功能更加强大,而且这玩意儿是安全的。需要atlstr.h文件和MFC?DLL的支持??不过目前已经有人将此类型从MFC中分离~ ? ? ?为了增强程序的通用性,还必须注意以下几点: 1、既然程序里不能出现char,那表示字符串时,就不能再习惯性的用char*了。应该改为TCHAR*,或者是PTSTR。后一种是?windows的变量,类似的有: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字符串。同样也不能在前面加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、该和一堆老朋友说再见了……我们不能再使用以前

您可能关注的文档

文档评论(0)

185****7617 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档