C 语言 memmove()

17 Mar 2025 | 6 分钟阅读

memmove() 函数用于将内存块从一个位置复制到另一个位置。该函数在 string.h 文件中声明。

语法

memmove 函数的语法如下

传递给函数的参数

  • strng1: 指向要将源内存块的内容复制到的内存块的指针。指针的数据类型为 *void。
  • strng2: 指向要从中复制内容的内存块的指针。指针的数据类型为 *void。
  • n: 要从一个位置移动到另一个位置的数据字节数。

返回

它返回一个指向内存块目的地的指针,根据语法,该指针是 strng1。

C 语言中 memmove() 函数的实现

让我们来实现 memmove() 函数。在此函数中,我们将 orgnl 数组的内容移动到 new 数组。

输出

memmove() in C

与 C 语言 memmove() 函数相关的一些事实

通过示例,让我们讨论与 memmove() 函数相关的一些重要事实。

  • 如前所述,C 语言中的 memmove() 函数即使在两个缓冲区重叠的情况下,也可以将内容从源位置移动到目标缓冲区。如果给定源和目标不重叠,则建议使用 memcpy() 而不是 memmove() 函数。但如果它们重叠,函数将表现出未定义行为。在这种情况下,您应该使用 memmove() 函数。

让我们讨论示例

输出

memmove() in C
  • memcpy() 和 memmove() 这两个函数的执行时间几乎相等,尽管它可能因平台或编译器而异。memcpy() 函数可能比 memmove() 慢或快,但差异非常小。

输出

memmove() in C
  • memmove() 和 memcpy() 函数工作的主要区别在于 memmove() 函数是双向的,而 memcpy() 函数是单向的。Memmove 也可以向前和向后移动字节,而 memcpy 只能向前移动。

在 C 语言中实现您自己的 memmove() 函数

string.h 头文件中定义的标准函数非常高效,并且能够处理开发人员在将数据从一个位置移动到另一个位置时可能面临的所有可能情况。因此,如果不是必须定义自己的 memmove() 函数,用户应该避免这样做。

实现 memmove() 函数就像实现 memcpy 函数一样,但在这里我们还必须考虑重叠。这使得程序比 memcpy() 函数更复杂。

这也增加了程序的空间复杂度,因为我们需要初始化一个临时数组。临时数组将用于管理重叠情况。

要移动的所有字符将首先存储在此临时数组中,然后将存储在临时数组中的这些字符移动到目标位置。

让我们编写一个驱动程序来确保我们构建的函数能够正常工作。

输出

memmove() in C

在上面的代码中,我们使用了驱动代码。我们已经使用上面定义的 my_memove() 函数复制了一个字符串和一个数组。我们使用了一个临时数组来确保重叠得到处理。因此,字符串和数组被复制了,我们的函数工作得很完美。