如果我有一个元素数组,是否可以使用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编译器。
答案 0 :(得分:1)
这不行:memcpy
要求源和目标区域不重叠。 C专门为区域做重叠的情况提供函数memmove
。
由于你在这里标记了C ++,你也可以考虑使用std::copy
,因为它的约束弱于memcpy
:只是目标迭代器必须在要复制的范围之外,这就是情景中的案例。