hur.cn - 华软网

 热门搜索

【【急急急急急急】】】 wchar_t表现诡异!

  作者:未知    来源:网络    更新时间:2010/12/5
比如以下的代码

MessageBox(0,L"start",0,0);

char p1[7]={'\0','a','\0','a','\0','\0','\0'};
wchar_t *p2=(wchar_t *)(p1+1);

strlen((char *)p2);
wcslen(p2);

MessageBox(0,L"end",0,0);

正常情况下,strlen((char *)p2)应该前往1,wcslen(p2)应该前往2,

在win32 api,win32 mfc,win32 控制台中都没有所有问题,能够看到两次MessageBox

但一样的代码在vs2008 Win32智能设备项目(api或mfc)中,就不正常了
只需调用wcslen(p2);语句程序就会溃散(只看到一个MessageBox)
但如果将第三个语句改成wchar_t *p2=(wchar_t *)(p1+2);则不会溃散。



这个现象太奇怪了,我一点措施也没有

谢谢
---华软 网友回答---
可能是奇偶地址不同,设备不能支持从奇数地址读取 wchar_t 致使

解决措施,分配

wchar_t wData[100];
memcpy(wData, ...);
MessageBox(xxx);

 先复制出来,再举行显示。
---华软网友回复---
引用 1 楼 lazy_2010 的回复:
可能是奇偶地址不同,设备不能支持从奇数地址读取 wchar_t 致使

解决措施,分配

wchar_t wData[100];
memcpy(wData, ...);
MessageBox(xxx);

 先复制出来,再举行显示。

涨见识了 顶!
---华软网友回复---
wchar_t是宽字节。,char是单字节啊,内存结构不同的。,,。不能简单的copy内存
---华软网友回复---
楼上分析的很精辟      
华软声明:本内容来自网络,如有侵犯您版权请来信指出,本站立即删除。