[C++] memcopy 和 memmove的区别和实现
memcopy 和 memmove的区别和实现
memmove考虑了覆盖问题,memcopy并没有考虑覆盖问题。如果两者具有交叉
int memcopy(char* dest, const char* src,int length){ assert(dest!=null&&src!=null); while(length--){ *dest++=*src++; } return 0; }
上面的代码是memcopy的一种实现,假设dest和src有重复,并且dest的地址要大于src的地址,那么刚开始在写dest指针位置的时候,实际上也修改了src字符串的后端位置的字符,从而将原先字符覆盖掉,从造成在复制src的后半段的时候会出现复制的字符正确的问题。所以,这种情况需要单独考虑,可以从字符串的高地址开始复制,从而解决这种情况下所遇到的问题。
int memmove(char* dest,const char* src,int length){ assert(dest!=null&&src!=null); if(dest>src){ dest = dest + length; src = src + length; while(length--){ *dest++=*src++; } }else{ while(length--){ *dest++=*src++; } } return 0; }