memcpy存在两种情况的拷贝 一种是由内存覆盖,另一种是无内存覆盖
针对内存覆盖情况,只有一下一种需要从后往前拷贝:dst < src + len && dst > src
不多说直接上代码:
#include <stdio.h>
#include<string.h>
#include <assert.h>
void* my_memcpy(void *dst, const void* src, size_t size)
{
if(dst == NULL || src == NULL || size <= 0)
return dst;
char* pdst = (char *)dst;
char* psrc = (char *)src;
if(pdst < psrc + size && dst > src){ //DOWN COPY,向前拷贝
pdst = pdst + size;
psrc = psrc + size;
while(size > 0){
*pdst-- = *psrc--;
size --;
}
}
else { //UP COPY,向后拷贝
while(size > 0){
*pdst++ = *psrc++;
size --;
}
}
return dst;
}