首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

memmove跟memcpy的区别,请举例

2012-08-14 
memmove和memcpy的区别,请举例!别说重叠之类的理论了请高手直接举例,就是用在相同的情况下memmove和memcpy

memmove和memcpy的区别,请举例!
别说重叠之类的理论了
请高手直接举例,就是用在相同的情况下memmove和memcpy的效果不同
我看MSDN上例子也看不出这两个函数的区别
当然例子越简练,越说明问题也好
例如ch1[]=" ... ";
  ch2[]=" ... ";
如果memcpy结果怎样,memmove结果怎样?


[解决办法]
重点就是重叠的区域在读取前会被覆盖。只有从重叠区域的低地址往高地址复制时会有问题。

如8楼的例子,char a[]="0123456789", 把a[0]开始的9个字节复制到a[1]开始的9个字节。也就是说把"012345678"替换"123456789".

在memcpy时,首先是前4个字节"0123"替换"1234",替换后,注意:原来a[4]的位置的'4'已经被'3'覆盖。下次从a[4]开始取4个字节就不是预期的"4567"了,而是"3567"。最后导致复制完后a[]变成了"0012335677"

memmove会考虑这种情况,发现了重叠时,会倒过来从高地址开始往前复制。先用"5678"覆盖"6789",然后用"1234"覆盖"2345",最后用'0'覆盖'1',这样就没有数据丢失。

热点排行