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; }