F_G

许多问题需要说清楚就可以&&走永远比跑来的重要

导航

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

 

[1] http://www.jb51.net/article/56012.htm

posted on 2015-09-12 19:03  F_G  阅读(593)  评论(0编辑  收藏  举报