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

时间:2017-06-12 01:00:31

标签: c++ memcpy

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

1 个答案:

答案 0 :(得分:1)

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

由于你在这里标记了C ++,你也可以考虑使用std::copy,因为它的约束弱于memcpy:只是目标迭代器必须在要复制的范围之外,这就是情景中的案例。