c ++使用memcpy在数组内复制

c++ using memcpy to copy inside the array

如果我有一个元素数组,可以使用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 编译器。

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

既然你在这里被标记为C++,你也可以考虑使用std::copy因为它的约束比memcpy弱:只是目标迭代器必须在要复制的范围之外,这你的场景就是这样。