memmove是 C 语言标准库中的一个函数,用于将指定数量的字节从源内存块复制到目标内存块。与memcpy不同,memmove可以安全地处理内存重叠的情况,避免数据损坏。

memmove函数头文件

memmove函数的头文件是<string.h>。在使用memmove函数之前,确保在你的 C 代码中包含这个头文件:

#include <string.h>

memmove函数原型

void *memmove(void *s1,
    const void *s2,
    size_t n);

memmove函数将s2指向的对象中的n个字符复制到s1指向的对象中。

复制过程如下:

  1. 首先将s2指向的对象中的n个字符复制到一个不与s1s2指向的对象重叠的n个字符的临时数组中;
  2. 然后将临时数组中的n个字符复制到s1指向的对象中。

参数说明

  • s1:指向目标内存的指针,表示复制的目标位置;
  • s2:指向源内存的指针,表示要复制的数据来源;
  • n:要复制的字节数;

返回值

memmove函数返回目标内存块的指针,也就是s1的值。

memmove示例代码

以下是一个简单示例,展示了memmove函数在重叠内存情况下的使用:

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

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

	//源地址内存和目标地址内存重叠
	//使用memmove能安全的处理
    memmove(str, str + 7, 5);

    str[5] = '\0';  // 字符串末尾添加空字符

    printf("%s\n", str);
    return 0;
}

程序运行结果

World