用C语言实现一个公用库函数void * memmove(void *dest,const void *src,size_t n)。
该函数的功能是拷贝src所指的内存内容前n个字节到dest所指的地址上。
注意,作为公用库函数,请注意安全检查,注意处理内存区重合的情况。
memmove和memcpy的区别在于memcpy当存在重合的区域时,要进行报错或者其他处理。。。
void* memmove(void *dest, const void *src,size_t n) { if (n == 0) return 0; /* 验证参数 */ if (dest == NULL) return 0; if (src == NULL) return 0; char *psrc = (char*)src; char *pdest = (char*)dest; /*检查是否有重叠问题 */ if((dest <= psrc) || (pdest >= psrc + n)) { /*正向拷贝*/ for(int i=0; i < n; i++) { *pdest = *psrc; psrc++; pdest++; } } else { /*反向拷贝*/ psrc += n; pdest += n; for(int i=0;i<n;i++) { psrc--; pdest--; *pdest = *psrc; } } return dest; }