c++实现memcpy

实现memcpy函数主要考虑内存重叠问题。

因为dst的内存起始地址可能处在src+length所在的内存范围内,所以需要对不同的情况进行区分

1.对于dst <src和dst>src+length二种情况下不存在内存重叠问题,所以直接拷贝

2.对于内存重叠,需要从后端拷贝,这样dst是不会覆盖还未拷贝的src数据。

#include<iostream>
using namespace std;
void * my_memcpy(char  *dst,const void  *src, int length)
{
	if (src == nullptr || length <= 0)//边界值判断
		return nullptr ;
	char *d = nullptr;
	char *s = nullptr;
	
	if (dst < src || dst > ((char*)src + length))//没有重叠
	{
		s = (char *)src;
		d = (char *)dst;
		while (length--)
		{
			*d = *s;
			s++;
			d++;
		}
	}
	else//内存重叠
	{
		s = (char*)src + length - 1;
		d = (char*)dst + length - 1;
		while (length--)
		{
			*d = *s;
			s--;
			d--;
		}
	}
	return d;
}
void main()
{
	char a[10];
	char *p = "11111111";
	my_memcpy(a, p, 10);
	cout << a << endl;
}

猜你喜欢

转载自blog.csdn.net/weixin_36704535/article/details/80303193
今日推荐