vs2010提示error C2440: “=”: 无法从“wchar_t *”转换为“char *”,求解

本文解析了CString::GetBuffer()返回的LPTSTR类型,解释了它在Unicode与非Unicode模式下的具体定义,并提供了如何在不同情况下正确使用的建议。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

CString::GetBuffer()返回的类型是LPTSTR。
我们查看LPTSTR的定义:
<WINNT.H>
#ifdef  UNICODE                     // r_winnt
typedef LPWSTR PTSTR, LPTSTR;
#else   /* UNICODE */               // r_winnt
typedef LPSTR PTSTR, LPTSTR;
#endif /* UNICODE */                // r_winnt

在看LPWSTR和LPSTR的定义:
<WINNT.H>
#ifndef _MAC
typedef wchar_t WCHAR;    // wc,   16-bit UNICODE character
#else
typedef unsigned short WCHAR;    // wc,   16-bit UNICODE character
#endif
typedef WCHAR *LPWSTR, *PWSTR;
--------------------也就是说,LPWSTR 是 wchar_t*或者unsigned*
typedef char CHAR;
typedef CHAR *LPSTR, *PSTR;
-------------------也就是说,LPSTR是char*

这两者定义不一致,所以不能直接赋值。
究其原因,就是你在创建工程的时候(可能是默认),选择了UNICODE模式。
修改有两种:一是去掉UNICODE模式
二是
char *pstr;定义改为LPTSTR pstr;这样也可以使用 printf()()或者MessageBox()输出,允许使用多字节的非ASCII字符。 (功能基本不受影响
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值