C语言--memmove和memcpy比较

memmove 

 

原型:void *memmove( void* dest, const void* src, size_tcount );
用法:#include <string.h>或#include <memory.h>

功能:由src所指内存区域复制count个字节到dest所指内存区域。

说明:src和dest所指内存区域可以重叠,但复制后dest内容会被更改。函数返回指向dest的指针。

相关函数:memset、memcpy

代码:

void *memmove(void *dest, const void *src, size_t count)

{

    void *ret = dest;

    if(dest == NULL || src == NULL)

        return;

    //这里来判别dest和src是否是指向同一字符串中不同位置,

    //如果是指向同一字符串,但是dest在src前面,则可以从前往后逐个赋值

    //如果是指向同一字符串,但是dest在src后面,且dest>=src+count,那么仍然从前往后赋值

    if(dest <= src || dest >= src+count)

    {

        while(count--)

            *dest++ = *src++;

    }

    //如果是指向同一字符串,但是dest在src后面,且dest<=src+count,那么从后往前赋值

    else

    {

        dest += count-1;

        src += count-1;

        while(count--)

            *dest-- = *src--;

    }

    return ret;

}

memcpy代码:

void *memcpy(void *dest, const void *src, size_t count)

{

    void *ret = dest;

    if(dest == NULL || src == NULL)

        return;




    while(count--)

        *dest++ = *src++;




    return ret;

}

 

参照网址:

http://wenku.baidu.com/view/2d45fb1f650e52ea55189803.html

http://blog.csdn.net/jianzhibeihang/article/details/5087486

点赞