【问题标题】:Is it safe to use memcpy to shift elements in an array? [duplicate]使用 memcpy 移动数组中的元素是否安全? [复制]
【发布时间】:2021-06-05 16:40:31
【问题描述】:

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

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 的复制顺序可能会破坏数据移位。

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

【问题讨论】:

标签: c memcpy


【解决方案1】:

您不必在memcpy 的描述中阅读太多内容,就会发现您不能重叠源和目标。

这是标准:

7.21.2.1 memcpy 函数

说明

2 memcpy 函数将 s2 指向的对象中的 n 个字符复制到 s1 指向的对象。如果复制发生在重叠的对象之间,则行为 未定义

【讨论】:

  • 当源和目标重叠时可以使用memmove
猜你喜欢
  • 2012-12-07
  • 2011-04-23
  • 1970-01-01
  • 2021-03-07
  • 1970-01-01
  • 1970-01-01
  • 2018-11-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多