使用 memcpy 移动数组中的元素是否安全?

Is it safe to use memcpy to shift elements in an array?

假设我有一个包含垃圾和数据的整数数组。我希望移动这个数组,使数据位于数组的开头。

Current:
[?, ?, ?, ?, 1, 1, 1, 1, 1]
 ----------  -------------
 JUNK        DATA

Desired:
[1, 1, 1, 1, 1, ?, ?, ?, ?]
 -------------  ----------
 DATA           JUNK

使用 memcpy 执行此转换是否安全?

memcpy(my_array, my_array + 4, 5)

我很好奇 memcpy 的复制顺序可能会破坏数据移位。

注意:在有人问之前,我正在使用遗留代码。我认为我的问题的真正解决方案需要一个循环缓冲区,这样我就不必在数组内移动数据。

您不必仔细阅读 memcpy 的说明就会发现源和目标不能重叠。

标准如下:

7.21.2.1 The memcpy function

Description

2 The memcpy function copies n characters from the object pointed to by s2 into the object pointed to by s1. If copying takes place between objects that overlap, the behavior is undefined