LPCTSTR的用法

(资料大全加程序)C++ 字符串之间的相互转化 宽字符与多字符集(LPTSTR、LPCSTR、LPCTSTR、LPSTR) 资料大全加程序 宽字符与多字符集(LPTSTR、LPCSTR、LPCTSTR、LPSTR) C++ 字符串之间的相互转化 立即下载

L表示long指针
      这是为了兼容Windows 3.1等16位操作系统遗留下来的,在win32中以及其他的32为操作系统中, long指针和near指针及far修饰符都是为了兼容的作用。没有实际意义。

      P表示这是一个指针;C表示是一个常量;T表示在Win32环境中, 有一个_T宏,这个宏用来表示你的字符是否使用UNICODE, 如果你的程序定义了UNICODE或者其他相关的宏,那么这个字符或者字符串将被作为UNICODE字符串,否则就是标准的ANSI字符串;STR表示这 个变量是一个字符串。所以LPCTSTR就表示一个指向常固定地址的可以根据一些宏定义改变语义的字符串。同样, LPCSTR就只能是一个ANSI字符串,在程序中我们大部分时间要使用带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;

告别C盘爆红!手把手教你将WSL2下的Ubuntu 22.04完整迁移到D盘(附清理指南) 本文详细指导如何将WSL2下的Ubuntu 22.04从C盘无损迁移到D盘,包括导出备份、注销原系统、导入新位置等关键步骤,并提供迁移后的优化配置、开发环境衔接及长期维护技巧,帮助用户彻底解决C盘空间不足问题。 阅读详情

相关推荐

Ansys Motor-CAD:概述(EMag、THERM、LAB、MECH)

在这篇博客中,我概述了如何使用 Ansys Motor-CAD 模型、模拟、分析和后处理结果来评估电机性能,并帮助您为您的应用选择优化的电机,并通过电机设计选择实现成本效益和效率。我介绍了各种可用的电机类型、可供选择的物理模块和可配置的多物理选项。E-Mag 物理模块有许多选项卡,涵盖几何创建、材料选择、电磁设置、条件、求解器类型、解决方案模型、耦合设置等的所有设置。热物理模块有许多选项卡,涵盖几何创建、材料选择、热设置、条件、求解器类型、解决方案模型、耦合设置等的所有设置。分析结果的速度相结合。

jkh920184196的博客 1755

C++ | 一文读懂C++字符串(string、CString、LPSTR、LPTSTR、LPWSTR...)

C++ 字符串讲解,字符串从此不再迷茫(学习中,可能会出现理解误区,欢迎指正)

王雪亮 7570

cs188Inference in Bayes Nets(贝叶斯网络的推理)

cs188Inference in Bayes Nets贝叶斯网络的推理Question1(3 points):Bayes Net StructureQuestion2(1 points):Bayes Net ProbabilitiesQuestion 3(5 points):Join FactorsQuestion4(4 points):EliminateQuestion5(4 points):NormalizeQuestion 6(4 points):Variable EliminationQuesti

weixin_46582817的博客 1673

MFC的字符串CString处理

<br />CString是MFC提供的类,<br />先认识一下vc++中各种字符串的表示法<br />char* 是指向ANSI字符数组的指针,其中每个字符占据8位(有效数据是除掉最高位的其他7位),这里保持了与传统的C,C++的兼容。<br />LP的含义是长指针(long pointer)。LPSTR是一个指向以‘/0’结尾的ANSI字符数组的指针,与char*可以互换使用,在win32中较多地使用LPSTR。<br /> 而LPCSTR中增加的‘C’的含义是“CONSTANT”(常量),表明

人生若可如罗盘,就不需迷茫 3415

ZYNQ Linux 应用层 利用 AXI DMA 进行数据传输

ZYNQ Linux应用层 利用 AXI DMA 进行数据传输 软件版本: VIVADO2018.2 操作系统: Debian 9 硬件平台: ZYNQ-MZ7100FA 嵌入式操作系统:Debian(4.19.0-xilinx) AXI-DMA驱动:GitHub:bperez77/xilinx_axidma 一、搭建硬件环境 参见:《ZYNQ 修炼秘籍裸机篇 2019 版》第21章:CH21 利用 AXI DMA 进行批量数据环路测试 参考文章: ZYNQ跑系统 系列(四) AXI-DMA的linux下运

jin787730090的博客 1万+

【免费】最新区块链钱包和私钥的助记词碰撞器,使用python开发

最新钱包私钥助记词碰撞器,搏一搏单车变摩托!

weixin_48529185的博客 1万+

LPCTSTR 用法

LPCTSTR 用法

weixin_43738967的博客 562

【附源码】Node.js毕业设计高校院级校友信息管理系统(Express)

首先,该系统可以提高高校对校友信息管理的效率和准确性。通过系统提供的查询功能,高校可以方便地获取校友的最新联系方式和动态,及时了解校友的发展情况,为校友提供更好的服务和支持。总之,开发高校院级校友信息管理系统将为高校提供一个高效、便捷的工具,有助于提升校友管理水平和服务质量,促进高校与校友之间的良好互动关系。通过使用前端技术HTML、CSS、JavaScript和Vue框架,结合后端技术Node.js和Express框架,以及MySQL数据库,可以实现对校友信息的快速录入、查询、修改和删除等操作。

佳愉毕设源码 892

cstringw转lpctstr_【转】LPCTSTR的用法

L表示long指针这是为了兼容Windows 3.1等16位操作系统遗留下来的,在win32中以及其他的32为操作系统中, long指针和near指针及far修饰符都是为了兼容的作用。没有实际意义。P表示这是一个指针;C表示是一个常量;T表示在Win32环境中, 有一个_T宏,这个宏用来表示你的字符是否使用UNICODE, 如果你的程序定义了UNICODE或者其他相关的宏,那么这个字符或者字符串将...

weixin_39688687的博客 145

libero烧录信号抓取

提示:如果改了东西需要重新烧录,需要把这两个界面都关闭再libero打开。两个红色的要关闭掉。然后返回libero开始烧录,观测信号(如果只烧录观测从这一步开始就行)等到下面的messige出现以下信息表示run好了。在下图中右侧可以自己设置,设置完之后记得保存一下。run一下,耐心等待,有警告就ok,run完之后。run成功会变绿色,然后点下面的这个看波形。设置抓取信号:在libero打开。打开的就是烧录界面,直接run。

qq_34047965的博客 1420

新系统申请软件著作权详细操作说明

今年八月底版权中心系统升级,新系统相对好用一些,至少不用再拿IE访问了,但是多了一项实名认证。下面介绍新系统的操作流程。 目录注册、登录和实名认证注册登录实名认证软件登记申请申请表填写鉴别材料身份证明文件权利归属证明文件其他材料提交材料变更登记 注册、登录和实名认证 首先访问版权中心系统:https://register.ccopyright.com.cn/login.html,如果老系统有账号直接登录即可,没有的话需要注册。 注册 点击注册按钮进入注册。 根据实际情况选择个人或单位,每个个人或单位只能在

Programming Talk 1万+

mfc下cstring的部分用法:lpctstr 和getbuffer

<br />cstring是mfc里面相当好用的一个类,但是对与转换为char *的用法,很多人就不怎么明白了,很多人是getbuffer(),lpctstr混用的<br />但是又不甚明了里面的区别,简单介绍下,留个记录,防止以后忘掉了<br />cstring对效率的要求,导致了这个类在设计的时候使用了哪个lazy evaluation,多个对象互相赋值的时候,实际保存内容只有一份,使用引用计数,只有在某个对象写操作的时候,才会发生实质的创建内存+拷贝工作<br />以下是两个函数的具体定义:<br /

tompaz的专栏 2543

GEE必须会教程——一文教会你研究区域分块计算与合并

一整块算不是挺好的吗?emmmm,用过的人都知道,GEE好比幼年期的“紫妍”,要用“丹药”来养的,除非你是萧炎小友,到哪都有人给爆金币。我们今天想做的是计算2020年夏季西藏自治区的植被覆盖度(FVC),FVC的估算需要使用归一化植被指数(NDVI数据),这里我们用到的产品是MODIS的相关数据产品,该产品的分辨率是25 0m。下载好的结果毕竟是一块一块的,怎么对下载好的结果进行拼接,变成一张大图呢,别急,接下来,我们上科研小霸王——R语言。此处,我们通过省份数据,按照属性筛选,得到西藏自治区的行政边界。

Promising_GEO的博客 2511

LPCTSTR,LPCSTR,LPTSTR,LPSTR的区别及用法

LPCSTR       32-bit   指针,指向一个常量字串   LPSTR          32-bit   指针,指向一个字串   LPCTSTR    32-bit   指针,指向一个常量字串。此字串可移植到Unicode   和DBCS   LPTSTR       32-bit   指针,指向一个字串。此字串可移植到Unicode   和DBCS ----------------

hank209的VC/MFC学习之旅 1943

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

LPCTSTR,LPTSTR 用法

http://www.cnblogs.com/kantlee/archive/2009/06/08/1498704.html char是C语言标准数据类型,字符型,至于由几个字节组成通常由编译器决定,一般一个字节。Windows为了消除各编译器的差别,重新定义了一些数据类型,你提到了另外几个类型都是这样。CHAR为单字节字符。还有个WCHAR为Unicode字符,即不论中英文,每个字有两个字节组

happylife1527的专栏 3881

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

summary1 CString、using中指定别名的用法、constexpr、vector<string>转LPCTSTR、QueryPerformanceCounter (LARGE_INTEG

1、CString是MFC里面封装的一个关于字符串处理的功能很强大的类,所以如果在MFC框架内使用是不用自己加头文件的, 如果不在的话,就不能使用CString了 。 2、using中指定别名的用法 using value_type = _Ty value; 以后使用value_type value; 就代表_Ty value; https://blog.youkuaiyun.com/shift_ww...

weixin_40236507的博客 237

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

LPCTSTR

<br />LPCTSTR类型: <br />  L表示long指针 这是为了兼容Windows 3.1等16位操作系统遗留下来的,在win32中以及其他的32位操作系统中, long指针和near指针及far修饰符都是为了兼容的作用。没有实际意义。 <br />  P表示这是一个指针 <br />  C表示是一个常量 <br />  T表示在Win32环境中, 有一个_T宏 <br />  STR表示这个变量是一个字符串<br /> <br />这个宏用来表示你的字符是否使用UNICODE, 如果你的程序

帆软爱好者的专栏 1146

MFC学习(25)LPCTSTR和CString的关系

类型理解   LPCTSTR类型:   L表示long指针 这是为了兼容Windows 3.1等16位操作系统遗留下来的,在win32中以及其他的32位操作系统中, long指针和near指针及far修饰符都是为了兼容的作用。没有实际意义。   P表示这是一个指针   C表示是一个常量   T表示在Win32环境中, 有一个_T宏   STR表示这个变量是一个字符串 详细释义

luoyouren的专栏 5799

c++ 中的 LPCTSTR类型 

LPCTSTR类型   L表示long指针 这是为了兼容Windows 3.1等16位操作系统遗留下来的,在win32中以及其他的32为操作系统中, long指针和near指针及far修饰符都是为了兼容的作用。没有实际意义。   P表示这是一个指针;C表示是一个常量;T表示在Win32环境中,有一个_T宏,这个宏用来表示你的字符是否使用UNICODE, 如果你的程序定义了UNICODE或者其他相关的宏,那么这个字符或者字符串将被作为UNICODE字符串,否则就是标准的ANSI字符串。   STR表示.

大西瓜不甜的博客 6220

LPCTSTR和CString的关系

类型理解   LPCTSTR类型:   L表示long指针 这是为了兼容Windows 3.1等16位操作系统遗留下来的,在win32中以及其他的32位操作系统中, long指针和near指针及far修饰符都是为了兼容的作用。没有实际意义。   P表示这是一个指针   C表示是一个常量   T表示在Win32环境中, 有一个_T宏   STR表示这个变量是一个字符串 详细释义

zxy355的专栏 386

Dword、LPSTR、LPWSTR、LPCSTR、LPCWSTR、LPTSTR、LPCTSTR

L表示long指针,这是为了兼容Windows 3.1等16位操作系统遗留下来的,在win32中以及其他的32为操作系统中, long指针和near指针及far修饰符都是为了兼容的作用,没有实际意义。即win32中,long,near,far指针与普通指针没有区别,LP 与P是等效的。 P表示这是一个指针。 T表示_T宏,这个宏用来表示你的字符是否使用UNICODE, 如果你的程序定义了U...

weixin_30553837的博客 241

如何理解LPCTSTR类型?

如何理解LPCTSTR类型?     L表示long指针 这是为了兼容Windows 3.1等16位操作系统遗留下来的,在win32中以及其他的32为操作系统中, long指针和near指针及far修饰符都是为了兼容的作用。没有实际意义。    P表示这是一个指针    C表示是一个常量    T表示在Win32环境中, 有一个_T宏   这个宏用来表示你的字符是否使

豆子的collection 465
上一篇: 最常见VC++6.0编译错误信息集合
下一篇: c# 从sql 数据库生成 excel (转)
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值