【发布时间】: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。