(LPSTR)(LPCTSTR)

AlanBruce
企业官方账号
2010-06-14 09:59:56
这个貌似在VC6.0和VS结果不一样。。。

求解释
...全文
125 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
jcwKyl 2010-06-14
  • 打赏
  • 举报
回复
比如unicode的"abcd"可能是 0x61 0x00 0x62 0x00 0x63 0x00 0x64 0x00
你用char *去指,它看到0x61 0x00,就以为这个char*已经遇到字符串结束标记了。所以这个
char *实际上指的是"a"
oyster2008 2010-06-14
  • 打赏
  • 举报
回复
因为X字符在Unicode中表示成\0x00X,遇到0x00,而0x00在char*里表示字符串结尾
[Quote=引用 4 楼 zhoutanliang 的回复:]

引用 3 楼 oyster2008 的回复:

VC6中默认字符集是MBCS,所以LPCTSTR=LPCSTR,强制转换成LPSTR也能看到结果
9中默认字符集是Unicode,所以你这是将char*指针指向Unicode字符串了


那为什么只是首字符呢
[/Quote]
jcwKyl 2010-06-14
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 zhoutanliang 的回复:]

引用 3 楼 oyster2008 的回复:

VC6中默认字符集是MBCS,所以LPCTSTR=LPCSTR,强制转换成LPSTR也能看到结果
9中默认字符集是Unicode,所以你这是将char*指针指向Unicode字符串了


那为什么只是首字符呢
[/Quote]

因为Unicode字符串是两个字节,你的X就变成了X0,所以char*看到0后就误以为是字符串结束了,所以只指向了第一个字符。
AlanBruce 2010-06-14
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 oyster2008 的回复:]

VC6中默认字符集是MBCS,所以LPCTSTR=LPCSTR,强制转换成LPSTR也能看到结果
9中默认字符集是Unicode,所以你这是将char*指针指向Unicode字符串了
[/Quote]

那为什么只是首字符呢
oyster2008 2010-06-14
  • 打赏
  • 举报
回复
VC6中默认字符集是MBCS,所以LPCTSTR=LPCSTR,强制转换成LPSTR也能看到结果
9中默认字符集是Unicode,所以你这是将char*指针指向Unicode字符串了
AlanBruce 2010-06-14
  • 打赏
  • 举报
回复
CString ss("XXXXX");
char* bb = (LPSTR)(LPCTSTR)ss;


在VC6.0下bb指向“XXXXX”

但VS2008下bb指向首字符“X”

大家可以验证。。
jcwKyl 2010-06-14
  • 打赏
  • 举报
回复
LPCTSTR是中的C表示const
你把问题再描述的详细一点

64,680

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧