码迷,mamicode.com
首页 > 其他好文 > 详细

strcpy, mencpy, memmove三者区别

时间:2015-04-28 09:31:01      阅读:94      评论:0      收藏:0      [点我收藏+]

标签:

首先来看strcpy,目的是实现字符串的复制,这里需要注意几个点:

1.判断指针的有效性

2.将复制后的指针地址返回,为了支持链式操作

3.不要忘记将字符串最后一个自负‘\0‘复制给dest

4.注意原字符串类型为const,保证在函数内部不会被修改

char* myStrcpy(char* dest, const char* src){
    assert(dest!=NULL && src !=NULL);
    char* r = dest;
    while((*dest++ = *src++)!=\0) ;
    return r;
}

然后来看memcpy,目的是实现内存的复制,这里就不仅仅限制于字符串复制,并且规定了复制内存的大小

void* myMemcpy(void* dest, const void* src, size_t n){
    assert(dest!=NULL && src !=NULL);
    void* r = dest;
    while(n--){
        *dest++ = *src++;
    }
    return r;
}

 最后来看memmove,实现的功能,与mencpy是一样的,不同的地方在于,其处理了目的内存与原内存重叠的情况。

void* myMemmove(void* dest, const void* src, size_t n){
    assert(dest!=NULL&& src!=NULL);
    void* r = dest;
    if(dest<src || dest>str+n){   //no recover
        while(n--){
            *dest++ = *src++;
        }
    }else{   // with recover, copy from end to begin
        dest = dest+n;
        src = src + n;
        while(n--){
            *(--dest) = *(--src);
        }
    }
    return r;
}

总体看来,strcpy, memcpy和memmove都是对内存进行复制操作的,不同之处在于,strcpy强调对于字符串的处理,memcpy要给定复制内容的大小,memmove则注意了内存重叠的情况

strcpy, mencpy, memmove三者区别

标签:

原文地址:http://www.cnblogs.com/xiamaogeng/p/4462009.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!