类型理解
  LPCTSTR类型:
  L表示long指针 这是为了兼容Windows 3.1等16位操作系统遗留下来的,在win32中以及其他的32位操作系统中, long指针和near指针及far修饰符都是为了兼容的作用。没有实际意义。
  P表示这是一个指针
  C表示是一个常量
  T表示在Win32环境中, 有一个_T宏
  STR表示这个变量是一个字符串
详细释义
      这个宏用来表示你的字符是否使用UNICODE, 如果你的程序定义了UNICODE或者其他相关的宏,那么这个字符或者字符串将被作为UNICODE字符串,否则就是标准的ANSI字符串。
  所以LPCTSTR就表示一个指向常固定地址的可以根据一些宏定义改变语义的字符串。
  在程序中我们大部分时间要使用带T的类型定义。
  LPCTSTR == const TCHAR *
  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函数。
  CString 转LPCTSTR:
   CString cStr;
  const char *lpctStr=(LPCTSTR)cStr;
  LPCTSTR转CString:
  LPCTSTR lpctStr;
  CString cStr=lpctStr;

CString和LPCSTR区别相关推荐

  1. cstring与string区别联系

    cstring和string区别与联系 string.string.h和cstring的区别是很大的.string.h是c语言的库,用于处理char *类型的字符串.string和cstring是c+ ...

  2. [c++]int、float、char、string、CString、LPCSTR、LPCTSTR的相互转换

    1. CString->LPCSTR 直接赋值即可 CString cs = "abcd"; LPCSTR lp = cs; 2. CString->LPCTSTR L ...

  3. CString::CompareNoCase与CString::Compare的区别

    函数原型:int CompareNoCase( LPCTSTR lpsz ) const; 返回值: 该函数对两个CString对象进行,如果内容完全一致则返回0:如果小于lpsz,则返回为-1:如果 ...

  4. CString::CompareNoCase与CString::Compare的区别 .

    函数原型:int CompareNoCase( LPCTSTR lpsz ) const; 返回值: 该函数对两个CString对象进行,如果内容完全一致则返回0:如果小于lpsz,则返回为-1:如果 ...

  5. CString 转 LPCSTR

    CString str; // the given string CStringA strA(str); // a helper string LPCSTR ptr = strA;

  6. 【C++】CString转LPCSTR

    突然制杖,不会写了,网上的方式都不好用,记录一个我编译通过的. CString aa  : (LPCSTR)aa.GetString(); 嗯,就这样.

  7. 无法从“cstring”转换为“lpcstr”_U盘重装系统后,无法使用?

    U盘重装系统,误GPT分区转换到mbr分区后,无法读取,储存,格式化失败,解决方法如下: 无法读取 无法格式化 1.按住"WIN+R",呼出"cmd"命令符 W ...

  8. string类 string.h头文件 cstring头文件区别以及读取一行字符串总结

    以前一直分不清string类  string.h头文件 cstring头文件的去别,今天ce了一发才稍微弄懂了. 首先C语言中只有string.h头文件,string.h包含了一些字符数组和字符串的函 ...

  9. 无法从“CString”转换为“LPCSTR”

    float inputdata=atof(LPCSTR(GetInputString())); m_StackData.push(inputdata); while(!m_StackOprator.i ...

最新文章

  1. R语言使用colnames函数改变dataframe列名称实战
  2. 计算机视觉中本质矩阵的概念,【计算机视觉】Lecture 19:本质矩阵和基础矩阵...
  3. DirectX 3D相关资源参考
  4. 30万奖金海华AI挑战赛 | 用机器挑战中文阅读理解
  5. 如何在生产环境使用Btrace进行调试
  6. 关于计算机与网络导论的论文,计算机科学与导论论文5
  7. php 区块链算法_PoW/BFT等5种主流区块链共识算法的开源代码实现
  8. 自然语言处理 —— 2.6 word2vec
  9. VC6 ODBC 例子 之一
  10. SpringBoot项目的测试类
  11. 阿里图标库的使用方式
  12. 《TCP/IP详解》协议卷读书笔记之概述
  13. java希腊字母表怎么打印_java 命令行窗口输出希腊字母表
  14. 桌面虚拟化(VDI)的概述
  15. MyEclipse 2014 破解失败,cracker.jar文件打开闪退
  16. 2021(上海)第34届国际创业投资连锁加盟展览会
  17. html设置首页到尾页的按钮,AspNetPager里面的按钮(如:首页,上一页 下一页,尾页)如何更换为我想要的图片...
  18. 钩稽“及其在VE中的实现
  19. RCC详解_day7
  20. IDLE使用方法详解

热门文章

  1. python 打包exe过程中找不到某模块路径解决
  2. 2022.3IDEA配置grep console
  3. python macos listdir_Python os.listdir()用法及代码示例
  4. 树莓派4支持多大tf卡_惊!自制树莓派投屏神器!
  5. 百度的竞争对手的分析
  6. 计算机语言bus代表什么,计算机中bus指什么
  7. 2021.12.9 学习总结
  8. 微信小程序跳转h5页面的方式
  9. linux管道符、重定向与环境变量。
  10. CentOS搭建云服务平台