打印
[研电赛技术支持]

memmove --- 重叠内存块数据搬运

[复制链接]
393|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
aoyi|  楼主 | 2023-7-18 12:14 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
memmove函数是C语言中的一个库函数,用于在内存之间移动数据块。它的函数原型如下:

void *memmove(void *dest, const void *src, size_t n);
其中,dest 是目标内存的指针,src 是源内存的指针,n 是要移动的字节数。

memmove 函数的作用是将 src 所指向的内存块的数据复制到 dest 所指向的内存块中。不同于memcpy 函数,memmove 函数可以处理内存块的重叠情况,即源内存和目标内存可以有重叠的部分。

memmove 函数会根据源内存和目标内存的位置关系,选择合适的复制方式。如果源内存的起始地址在目标内存的前面,memmove 函数会从前向后逐个字节复制数据。如果源内存的起始地址在目标内存的后面,memmove 函数会从后向前逐个字节复制数据。

memmove 函数返回指向目标内存的指针,即dest的值。下面是一个示例代码,演示了 memmove函数的用法:


#include <stdio.h>
#include <string.h>

int main() {
    char str[] = "Hello, World!";
    char buffer[20];

    memmove(buffer, str, strlen(str) + 1);

    printf("Copied string: %s\n", buffer);

    return 0;
}
在这个示例中,我们将字符串 "Hello, World!" 复制到了一个新的缓冲区buffer中。使用 memmove 函数可以确保即使源内存和目标内存有重叠,数据也能正确地复制过去。

总结:适用范围:由于memmove函数可以处理重叠内存块的情况,因此它更加灵活,适用于复制任意内存块的操作。而memcpy函数适用于不涉及重叠内存块的情况,可以更高效地进行数据复制。
————————————————
版权声明:本文为CSDN博主「嵌入式小宁」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_53592457/article/details/131677119

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

101

主题

3307

帖子

3

粉丝