分析:memmove函数是<string.h>的标准函数,其作用是把从source开始的num个字符拷贝到destination。最简单的方法是直接复制,但是由于它们可能存在内存的重叠区,因此可能覆盖了原有数据。
比如当source+count>=dest&&source<dest时,dest可能覆盖了原有source的数据。解决办法是从后往前拷贝,对于其它情况,则从前往后拷贝。
#include <stdio.h> #include <stdlib.h> #include <assert.h> void* memmove(void* dest, void* source, size_t count) { char* ret = dest; const char* src = source; if (dest <= source || dest >= (source + count)) { //正向拷贝 //copy from lower addresses to higher addresses while (count--) *(ret++) = *(src++); } else { //反向拷贝 //copy from higher addresses to lower addresses while (count--) *(ret + count) = *(src + count); } return ret; }