用C语言实现一个公用库函数void * memmove(void *dest,const void *src,size_t n)。该函数的功能是拷贝src所指的内存内容前n个字节到dest所指的地址上。注意,作为公用库函数,请注意安全检查,注意处理内存区重合的情况。
针对有可能出现的问题给出了一定的处理措施来防止拷贝出错:
(1)当源内存的首地址等于目标内存的首地址时,不进行任何拷贝
(2)当源内存的首地址大于目标内存的首地址时,实行正向拷贝
(3)当源内存的首地址小于目标内存的首地址时,实 行反向拷贝
void *memmove(void *dst, void *src, size_t n) { if (dst == NULL || src == NULL) { return NULL; } char *pdst = (char *)pdst; char *psrc = (char *)psrc; if (pdst <= psrc) { for (int i = 0; i < n; i++) { *(pdst + i) = *(psrc + i); } } else { for (int i = n - 1; i >= 0; i--) { *(pdst + i) = *(psrc + i); } } return pdst; }