首页 > 编程笔记

C语言memmove():实现内存拷贝(内存可重叠)

memmove() 是 C语言的一个标准库函数,定义在<string.h>头文件中。

memmove() 函数的功能是将源内存中的 n 个字节拷贝到目标内存里,即使源和目标内存区域重叠,memmove() 也能正确工作。

虽然 "move" 本意是移动的意思,但 memmove() 函数的功能是拷贝指定的字节数,而不是将其转移到其它的内存区域。

memmove() 函数的原型如下:
void *memmove(void *dest, const void *src, size_t n);

参数


也就是说,memmove() 函数是将 src 指向的内存块的前 n 个字节拷贝到 dest 指向的内存块。

返回值

返回参数 dest 的值,即返回一个指向目标内存区域的指针。

【实例】以下 C语言代码演示了如何使用 memmove() 在同一个数组内移动数据:
#include <stdio.h>
#include <string.h>

int main() {
    char str[] = "Hello, World!";
    printf("Original string: %s\n", str);

    // 将字符串前6个字符移动到字符串的末尾
    memmove(str, str + 7, 6);
    memmove(str + 6, "!", 2);

    printf("Modified string: %s\n", str);
    return 0;
}
输出结果为:

Original string: Hello, World!
Modified string: World!!

这个示例显示了如何使用 memmove() 在同一数组中移动数据,从而改变字符串内容。因为源和目标区域重叠,所以这个情景下必须使用 memmove() 而不是 memcpy()。

推荐阅读