C语言--memmove和memcpy比较

本文详细介绍了memmove函数的使用方法、功能特点及与memcpy、memset的区别,并通过代码实例展示其实现逻辑,帮助开发者更好地掌握内存操作技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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.youkuaiyun.com/jianzhibeihang/article/details/5087486

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值