c语言模拟实现库函数memmove

本文详细介绍了memmove函数的功能和使用方法。memmove用于在源内存和目标内存可能重叠的情况下安全地复制字节数据。文章提供了函数的具体实现,并解释了前后向拷贝的区别。

【函数作用】:memmove函数用于从sour(源内存)拷贝count个字节到dest(目标内存),如果目标内存和源内存有重叠的话,memmove函数能够保证源内存在被覆盖之前将重叠区域的字节拷贝到目标区域中。如果没有重叠,它和memcpy函数效果一样,但是效率没有memcpy函数高。为了可以拷贝各种类型的的数据,所以将形参和返回类型定义为void*(无类型),在函数内部强制类型装换为(char *),一个字节一个字节进行拷贝。

【函数原型】:在MSDN中查看memmove函数的原型

【实现方法】:当目标地址小于等于源地址从前向后拷贝;当目标地址大于源地址,从后向前拷贝。

【参考代码】:
void *my_memmove(void *dest, const void *sour, size_t count)
{
	void *cp = dest;//记录起始地址
	if (dest <= sour)
	{
		while (count--)
		{
			*(char *)dest = *(char *)sour;
			dest = (char *)dest + 1;
			sour = (char *)sour + 1;
		}
	}//从前向后拷贝
	else
	{
		while (count--)
		{
			*((char *)dest + count) = *((char *)sour + count);
		}
	}//从后向前拷贝
	return cp;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值