memmove的实现

上篇文章中,我们探讨了memcpy的缺陷,发现memcpy不能够实现后向拷贝,最后我们提出了其解决方案,本篇文章我们就来实现该方法,即memmove的实现

第一眼看到memmove的时候,第一映像是,memmove是将源数据剪切到目的地址,然后将源数据进行清除了,其实memmove就是拷贝的意思,只是在memcpy的基础上,增加了一个后向拷贝数据,实现原理如下所示

void *memmove(void *dest, void *src, unsigned long count)
{
	char *tmp;	
	const char *s;

	if (dest <= src) {
/*
		tmp = dest;	
		s = src;
		while (count--) {
			*tmp++ = *src++;
		}
*/
		memcpy(dest, src, count);
	}
	else {
		tmp = dest;
		tmp += count;
		s = src;
		s += count;
		while (count--) {
			*--tmp = *--s;
		}
	}
}

以上实现中,我们可以发现,当拷贝是前向拷贝的时候,我们可以memmove可以调用memcpy进行,当后向拷贝的时候,我们通过先拷贝重叠部分数据即可。

因此,memmove不论前向拷贝,还是后向拷贝总体思想就是优先拷贝重叠数据

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值