C++ 怎么转换LPCTSTR

我调用MessageBox函数,第一个参数要求这个类型怎么把字符串转换成这个... 我调用MessageBox函数,第一个参数要求这个类型
怎么把字符串转换成这个
展开
 我来答
tattackor
推荐于2016-06-18 · TA获得超过3.5万个赞
知道大有可为答主
回答量:5083
采纳率:94%
帮助的人:857万
展开全部
  1. LPCTSTR用来表示你的字符是否使用UNICODE, 如果你的程序定义了UNICODE或者其他相关的宏,那么这个字符或者字符串将被作为UNICODE字符串,否则就是标准的ANSI字符串。
    LPCTSTR类型:
    L表示long指针 这是为了兼容Windows 3.1等16位操作系统遗留下来的,在win32中以及其他的32位操作系统中, long指针和near指针及far修饰符都是为了兼容的作用。没有实际意义。
    P表示这是一个指针
    C表示是一个常量
    T表示在Win32环境中, 有一个_T宏
    STR表示这个变量是一个字符串

  2. 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;

匿名用户
推荐于2018-03-11
展开全部
unicode对应const wchar_t* 使用 L"12345"非unicode对应const char* 使用 "12345"
追答
用TEXT("文字")最好,自动根据_UNICODE标示符转换
用TEXT("文字")最好
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
cnnbwhq1972
2014-03-16 · TA获得超过3843个赞
知道小有建树答主
回答量:488
采纳率:83%
帮助的人:234万
展开全部
MessageBox(hWnd,L"aaf速度",L"你好",0); //直接前面加这个 L
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
ke_xue
2014-03-17 · 超过18用户采纳过TA的回答
知道答主
回答量:59
采纳率:0%
帮助的人:50.6万
展开全部
不用,用数组名即可
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式