当前位置: 首页 > news >正文

景德镇网站制作公司浦东新区网站推广公司

景德镇网站制作公司,浦东新区网站推广公司,个人网站方案建设书,域名和网站建设CString 和 LPCTSTR 可以说通用。 原因在于CString定义的自动类型转换#xff0c;没什么奇特的#xff0c;最简单的C操作符重载而已。常量字符串ansi和unicode的区分是由宏_T来决定的。但是用_T( abcd )时#xff0c; 字符串 abcd 就会根…CString   和   LPCTSTR   可以说通用。   原因在于CString定义的自动类型转换没什么奇特的最简单的C操作符重载而已。常量字符串ansi和unicode的区分是由宏_T来决定的。但是用_T( abcd )时   字符串 abcd 就会根据编译时的是否定一_UNICODE来决定是char*   还是   w_char*。   同样TCHAR   也是相同目的字符宏。   看看定义就明白了。简单起见下面只介绍   ansi   的情况unicode   可以类推。ansi情况下LPCTSTR   就是   const   char*,   是常量字符串(不能修改的)。而LPTSTR   就是   char*,   即普通字符串(非常量可修改的)。这两种都是基本类型   而CString   是   C类   兼容这两种基本类型是最起码的任务了。由于const   char*   最简单(常量不涉及内存变更操作迅速)   CString   直接定义了一个类型转换函数operator   LPCTSTR()   {......}   直接返回他所维护的字符串。当你需要一个const   char*   而传入了CString时   C编译器自动调用   CString重载的操作符   LPCTSTR()来进行隐式的类型转换。当需要CString   ,   而传入了   const   char*   时(其实   char*   也可以)C编译器则自动调用CString的构造函数来构造临时的   CString对象。因此CString   和   LPCTSTR   基本可以通用。但是   LPTSTR又不同了他是   char*   意味着你随时可能修改里面的数据这就需要内存管理了(如字符串变长原来的存贮空间就不够了则需要重新调整分配内存)。所以   不能随便的将   const   char*   强制转换成   char*   使用。楼主举的例子LPSTR   lpstr      (LPSTR)(LPCTSTR)string;就是这种不安全的使用方法。这个地方使用的是强制类型转换你都强制转换了C编译器当然不会拒绝你但同时他也认为你确实知道自己要做的是什么。因此是不会给出警告的。强制的任意类型转换是C()的一项强大之处但也是一大弊端。这一问题在   vc6   以后的版本(仅针对vc而言)中得到逐步的改进(你需要更明确的类型转换声明)。其实在很多地方都可以看到类似LPSTR   lpstr      (LPSTR)(LPCTSTR)string;地用法这种情况一般是函数的约束定义不够完善的原因   比如一个函数接受一个字符串参数的输入里面对该字符串又没有任何的修改那么该参数就应该定义成   const   char*   但是很多初学者弄不清const地用法或者是懒   总之就是随意写成了   char*   。   这样子传入CString时就需要强制的转换一下。这种做法是不安全的也是不被建议的用法你必须完全明白、确认该字符串没有被修改。CString   转换到   LPTSTR   (char*),   预定的做法是调用CString的GetBuffer函数使用完毕之后一般都要再调用ReleaseBuffer函数来确认修改   (某些情况下也有不调用ReleaseBuffer的同样你需要非常明确为什么这么做时才能这样子处理一般应用环境可以不考虑这种情况)。同时需要注意的是   在GetBuffer   和   ReleaseBuffer之间CString分配了内存交由你来处理因此不能再调用其他的CString函数。LPSTR、LPWSTR、LPCSTR、LPCWSTR、LPTSTR、LPCTSTR的区分与转化(转)首先在编译程序时经常会遇到这种问题错误 1 error C2664: “CWnd::MessageBoxW”: 不能将参数 1 从“const char [3]”转换为“LPCTSTR”1、觉得很烦一般的做法就是不管三七二十一在字符串前面加一个‘L’如调用函数FUN(LPCTSTR str)时不能  FUN(HELLO);     而是FUN(LHELLO);通常这样做都比较能解决问题。2、或者还可以用_T() 即 FUN(_T(HELLO));   _T() 的别名还有 _TEXT(), TEXT()。稍微研究了下BSTR,LPSTR,LPWSTR,LPCTSTR,LPTSTR等这些让人头晕的东东。(还是C#里简单啊直接tostring)BSTR是一个OLECHAR*类型的Unicode字符串是一个COM字符串带长度前缀与VB有关没怎么用到过。LPSTR即 char *指向以/0结尾的8位(单字节)ANSI字符数组指针LPWSTR即wchar_t *指向/0结尾的16位(双字节)Unicode字符数组指针LPCSTR即const char *LPCWSTR即const wchar_t *LPTSTRLPSTR、LPWSTR两者二选一取决于是否宏定义了UNICODE或ANSILPCTSTR LPCSTR、LPCWSTR两者二选一取决于是否宏定义了UNICODE或ANSI如下是从MFC库中拷来的#ifdef UNICODEtypedef LPWSTR LPTSTR;typedef LPCWSTR LPCTSTR;#elsetypedef LPSTR LPTSTR;typedef LPCSTR LPCTSTR;#endif3、相互转换方法LPWSTR-LPTSTR:   W2T();LPTSTR-LPWSTR:   T2W();LPCWSTR-LPCSTR: W2CT();LPCSTR-LPCWSTR: T2CW();ANSI-UNICODE:     A2W();UNICODE-ANSI:     W2A();另外CString转为CStringW方法(通过一个wchar_t数组来转)CString str;CStringW strw;wchar_t *text new wchar_t[sizeof(wchar_t) * str.GetLength()];MultiByteToWideChar(CP_ACP,0,str,-1,text,str.GetLength());strw text;4、另外还可以强行转换不过不一定能成功5、还有_bstr_t ( 对BTSTR的封装需要#include )也可将单字节字符数组指针转为双字节字符数组指针还没怎么没用到过。
http://www.pierceye.com/news/862819/

相关文章:

  • 域名到期对网站的影响做美缝在哪个网站接单
  • 网站建设技术网站刚做网站和搜出来的不一样
  • 营销型网站建设集装箱液袋如何做做网站
  • 刘晓忠 网站建设手机网站绑定域名是什么意思
  • 东莞网站建设 包装材料汅app下载大全2022
  • 湖南平台网站建设找哪家设计师培训班多少钱
  • 网站代码素材重庆渝发建设有限公司官网
  • 网站标题能改吗加强档案网站建设
  • 2016网站设计龙岩微信网站建设
  • 梅州建站规划网站建设从零到精通.pdf
  • 商业机构的网址网站关键词优化费用
  • 企业网站建设中期报告模板微信小程序开发需要哪些技术
  • 裕顺网站建设上海房价2022年最新房价
  • 百度联盟做网站赚钱制作网页完整步骤
  • 化妆品网站建设规划书范文h5网站建设h
  • 增城低价网站建设app制作公司哪个好
  • 网站建设制作苏州自己做网站能赚钱吗2018
  • 太原做手机网站临沂外贸网站
  • 哪个域名注册网站好下载爱南宁乘车
  • 网站备案接入商是什么交互设计个人网站
  • 移动 网站模板app推广视频
  • 网站网页设计中怎么添加页码信息wordpress中文包
  • 网站优化排名软件网怎么看网站服务器地址
  • iis网站建设中怎么免费做网站不要域名
  • 广州 网站开发 公司怎样做一个公众号
  • 注册网站域名需要什么河南网站建设定制
  • 白种女人做爰网站网站建设新闻动态
  • 360百度网站怎么做徐州企业建站模板
  • 宁波做公司网站的公司wordpress 说说 插件
  • 做毕业设计网站教程网页设计培训机构多少钱