| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2572 人关注过本帖
标题:C++求助 字符串遇到 0x00(二)
只看楼主 加入收藏
rosemaryzed
Rank: 1
等 级:新手上路
帖 子:19
专家分:0
注 册:2020-7-7
收藏
得分:0 
结贴,自己看百度瞎鼓捣吧需求解决了。r版是对的,根据7楼回复给了很大启发在百度瞎鼓捣解决的。
总结一下就是怀疑wchar_t*内有0x00导致wcslen计算长度对不上,最后是这样解决的。
#define _UNICODE
_TCHAR* d = (_TCHAR*)lpvoida;//原来是这样指的 wcslen(d)计算出的长度对不上
TCHAR* d = (_TCHAR*)lpvoida;//获取到的LPVOID指过来
const size_t newsize = 8192;
wchar_t dest[newsize];
wcscpy(dest,d);//拷过来
主要需求是这样解决的
DWORD dlen = _tcslen(dest)//这样程序异常。长度对不上
DWORD dlen = _tcslen(dest) * sizeof(dest[0]);//这里+一个*sizeof(dest[0])就解决了。C艹太菜,不知道原理。目前理论解决需求。
我自己也描述不清楚我的需求跟解决方案。但是问题看起来暂时是解决了。
2021-12-19 17:33
rosemaryzed
Rank: 1
等 级:新手上路
帖 子:19
专家分:0
注 册:2020-7-7
收藏
得分:0 
回复 7楼 rjsp
感谢r版指点,我自己瞎弄好像弄好了。
2021-12-19 17:33
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9007
专家分:53942
注 册:2011-1-18
收藏
得分:0 
我明白你的问题在哪里了

对于 const char* p = "abc"
strlen(p)等于3,说的是有3个有效char。而它所占用的字节数也是 3,因为C/C++规定“一个字节就是一个char所占用的内存”

对于 const wchar_t* p = L"abc"
wcslen(p)等于3,说的是有3个有效wchar_t。而它所占用的字节数却是 6(windows平台上wchar_t占2bytes,linux上wchar_t占4bytes),因为一个wchar_t并不就是占用一个byte。

对于任意的数组都是这样,比如
int a[3];
它有 3 个元素,但它占用的内存是 3 * sizeof(int)

[此贴子已经被作者于2021-12-19 18:56编辑过]

2021-12-19 18:55
rosemaryzed
Rank: 1
等 级:新手上路
帖 子:19
专家分:0
注 册:2020-7-7
收藏
得分:0 
回复 13楼 rjsp
R版好似醍醐灌顶,我感觉也是这个问题,字符串里面是没有0x00的,我搞错了。应该是R版说的这样。
2021-12-31 22:04
快速回复:C++求助 字符串遇到 0x00(二)
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.048046 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved