使用 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
假设我有一个包含垃圾和数据的整数数组。我希望移动这个数组,使数据位于数组的开头。
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