模拟实现库函数memove

解决内存重叠的问题,解决方案是,通过一定的判断,来进行决策,是从左向右拷贝还是从右向左拷贝

1.先观察现象->内存重叠的时候,可能会将有效数据进行覆盖的问题
2.分析原因且提出初步的解决方案->左右拷贝,右左拷贝
3.穷举所有的可能覆盖的情况找到规律,总结策略

在这里插入图片描述

#include<stdio.h>
#include<windows.h>
#include<assert.h>
void *Mymemove(void* dst,const void* src, size_t num)
{
    
    
	//模拟实现memove
	assert(dst != NULL);
	assert(src != NULL);
	char* dst_p = (char*)dst;
	const char* src_p = (char*)src;
	if (dst_p > src_p && dst_p < src_p + num)
	{
    
    
		//从右向左
		while (num > 0)
		{
    
    
			*(dst_p+num-1) = *(src_p+num-1);	
			num--;
		}
	}
	else {
    
    
		//从左向右
		while (num > 0)
		{
    
    
			*dst_p = *src_p;
			dst_p++;
			src_p++;
			num--;
		}
	}
	return dst;
}
int main()
{
    
    
	char src[32] = "abcdefg123456";
	int len= strlen(src);
	Mymemove(src+3, src, len);//从左往右
	//Mymemove(src, src+3, len);//从右往左
	printf("%s\n", src);
	system("pause");
	return 0;
}
//运行环境vs2019

附图:

从左往右:

在这里插入图片描述

从右往左:

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_46078890/article/details/106873569