c语言模拟实现库函数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;
}

猜你喜欢

转载自blog.csdn.net/hansionz/article/details/80329724