实现一个memcpy函数
主要考虑:源内存地址和目的地址是否有重叠。若目的首地址位于源地址范围之内,拷贝应从高地址到低地址。否则无所谓。
代码实现:
#include "stdafx.h"
#include <iostream>
using namespace std;
char *my_memcpy(char *dst, const char *src, size_t len)
{
//check the address
if (dst == nullptr || src == nullptr)
return nullptr;
char *ret = dst;
//copy from low_address of src
if (dst <= src || dst >= src + len)
{
while (len--)
{
*dst++ = *src++;
}
}
//copy from high_address of src
else
{
src = src + len - 1;
dst = dst + len - 1;
while (len--)
{
*dst-- = *src--;
}
}
//return dst address
return ret;
}
int main()
{
char a[20] = { "\0" };
char b[20] = { "hello" };
my_memcpy(a, b, 3);
cout << a << endl;
return 0;
}
//output
hel
上面实现是基于覆盖型拷贝,控制源地址数据能够正确拷贝到目的地址。题目还可以搞的很复杂,不能覆盖。只给空闲地址拷贝数据,分情况讨论即可。