memcpy和memmove使用区别

余生长醉 提交于 2019-12-09 15:11:13

memcpy函数原型

void *memcpy(void *dest, const void *src, size_t n);

man手册描述:memcpy()函数从内存区域src复制n个字节到内存区域dest。内存区域不能重叠。如果内存区域重复使用memmove
memcpy实现

void *memcpy(void *dest, const void *src, size_t n)
{
    char *dp = dest;
    const char *sp = src;
    while (n--)
        *dp++ = *sp++;
    return dest;
}

memmove函数原型

void *memmove(void *dest, const void *src, size_t n);

man手册描述:memmove()函数将n个字节从内存区域src复制到内存区域dest
首先将字节复制到不重叠的src或dest的临时数组中,然后将这些字节从临时数组复制到dest。

memmove实现


```handlebars
void *memmove(void *dest, const void *src, size_t n)
{
    unsigned char tmp[n];
    memcpy(tmp,src,n);
    memcpy(dest,tmp,n);
    return dest;
}

由此可见memcpy的速度比memmove快一点,如果使用者可以确定内存不会重叠,则可以选用memcpy,否则memmove更安全一些。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!