【问题标题】:c++ using memcpy to copy inside the arrayc++ 使用 memcpy 在数组内复制
【发布时间】:2017-11-13 09:02:40
【问题描述】:

如果我有一个元素数组,是否可以使用memcpy将数组后面的一些数据复制到前面部分

在代码中呈现:

int a[5] = {1,2,3,4,5};

memcpy(a, a + 2, 3 * sizeof(int));

如您所见,某些部分被复制到前面的其他位置,然后稍后被覆盖(编号 3)。

memcpy 之后的数组是 {3, 4, 5, 4, 5},但这是否会引发未定义的行为,或者这样做是否完全有效?我正在使用 c++ 和 VS2017 编译器。

【问题讨论】:

  • 这就是memove() 的用途。
  • »如果对象重叠,则行为未定义。« en.cppreference.com/w/c/string/byte/memcpy
  • man memcpy : “内存区域不能重叠。”
  • 谢谢 henri menke,您可以将其发布为答案,以便我接受
  • 使用std::copy

标签: c++ memcpy


【解决方案1】:

这不行:memcpy 要求源区域和目标区域不重叠。 C 专门为区域确实重叠的情况提供了函数memmove

由于您在此处被标记为 C++,因此您还可以考虑使用 std::copy,因为它的约束比 memcpy 弱:只是目标迭代器必须在要复制的范围之外,您的场景就是这种情况.

【讨论】:

    猜你喜欢
    • 2020-04-22
    • 2020-02-24
    • 1970-01-01
    • 2015-06-05
    • 1970-01-01
    • 2016-05-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多