首页
课程
问答
CTF
社区
招聘
看雪峰会
发现
排行榜
知识库
工具下载
看雪20年
看雪商城
证书查询
登录
注册
首页
社区
课程
招聘
发现
问答
CTF
排行榜
知识库
工具下载
看雪峰会
看雪商城
证书查询
看雪社区
编程技术
发新帖
3
5
[原创]memcpy在unicode,ASCII中的用法区别
2011-11-27 17:47
11515
[原创]memcpy在unicode,ASCII中的用法区别
朱哥哥
2011-11-27 17:47
11515
在VS2010开发中,用到memcpy函数,虽然知道与在VC6.0中的用法是区别,但是还是碰了不少壁,在此总结一番,详情见windows核心编程。
1、在VC6.0中,默认的是ASCII字符集,因此以下函数会正常执行
char str[256];
CString strTemp = "helloworld"; //在MFC中测试。因此用得是CString
memcpy(str ,strTemp ,strTemp.GetLength() + 1); //末尾加一是为了拷贝'\0'。
str中的值会成为helloworld。在内存中占的单元数是11个
2、同样的程序在VS2010中会拷贝不成功。
因为VS2010默认为UNICODE,memcpy在拷贝的时候将str的两个内存单元用来存放一个字节,也就是要成功保存,占用字节数
为11*2 = 22个
因此程序应为:
char str[256];
CString strTemp = "helloworld";
memcpy(str ,strTemp ,strTemp.GetLength() *2 + 2);
3 、可能你已经想到用TCHAR来声明,即如下:
TCHAR str[256];
CString strTemp = "helloworld";
memcpy(str ,strTemp ,strTemp.GetLength() + 1);
经过测试,这样一样不会成功
原因是:memcpy函数只对内存单元进行操作,TCHAR str[256],只是多申请了256个单元,总单元数为256*2个,即相当于声明为:
char str[512]而已。
4、综上所述。在ASCII字符集中,memcpy函数操作的是将一个字节占用一个内存单元。
在UNICODE字符集中,占用的是两个内存单元
拷贝的时候,要注意第三个参数的使用,必须分配够足够的内存单元。
[培训]《安卓高级研修班(网课)》月薪三万计划,掌 握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法
收藏
・
3
点赞
・
5
打赏
分享
分享到微信
分享到QQ
分享到微博
赞赏
×
1 雪花
5 雪花
10 雪花
20 雪花
50 雪花
80 雪花
100 雪花
150 雪花
200 雪花
支付方式:
微信支付
赞赏留言:
快捷留言
感谢分享~
精品文章~
原创内容~
精彩转帖~
助人为乐~
最新回复
(
6
)
路独行
雪 币:
29
活跃值:
(10)
能力值:
( LV2,RANK:10 )
在线值:
发帖
39
回帖
143
粉丝
0
关注
私信
路独行
2011-11-27 18:40
2
楼
0
我是初学者。。没有看明白UniCode下
怎么实现才能成功。。
朱哥哥
雪 币:
57
活跃值:
(49)
能力值:
( LV2,RANK:10 )
在线值:
发帖
3
回帖
33
粉丝
0
关注
私信
朱哥哥
2011-11-27 19:01
3
楼
0
只需分配足够的空间即可,主要是第三个参数要正确设置为在unicode下所以的内存单元数。一般为ascii下得两倍
cdutboy
雪 币:
93
活跃值:
(25)
能力值:
( LV2,RANK:10 )
在线值:
发帖
3
回帖
25
粉丝
0
关注
私信
cdutboy
2011-11-27 19:07
4
楼
0
...................
_MBCS -> _UNICODE......
kennyl
雪 币:
203
活跃值:
(12)
能力值:
( LV2,RANK:10 )
在线值:
发帖
6
回帖
58
粉丝
0
关注
私信
kennyl
2011-11-27 19:09
5
楼
0
memcpy(str ,strTemp , (strTemp.GetLength() + 1)
* sizeof(strTemp[0])
);
雪yaojun
雪 币:
120
活跃值:
(160)
能力值:
( LV2,RANK:10 )
在线值:
发帖
23
回帖
595
粉丝
0
关注
私信
雪yaojun
2011-11-27 19:10
6
楼
0
ASCII | UNICODE
---------------------------------
memcpy | wmemcpy
memcpy_s | wmemcpy_s
kennyl
雪 币:
203
活跃值:
(12)
能力值:
( LV2,RANK:10 )
在线值:
发帖
6
回帖
58
粉丝
0
关注
私信
kennyl
2011-11-27 19:10
7
楼
0
貌似这些放到新手区就OK了
游客
登录
|
注册
方可回帖
回帖
表情
雪币赚取及消费
高级回复
返回
朱哥哥
3
发帖
33
回帖
10
RANK
关注
私信
他的文章
[求助]minifilter-preRead中如何自建IRP读取?
5124
[原创]memcpy在unicode,ASCII中的用法区别
11516
[求助]windows驱动开发技术详解何处有售?
14129
关于我们
联系我们
企业服务
看雪公众号
专注于PC、移动、智能设备安全研究及逆向工程的开发者社区
看原图
返回
顶部