如果我有一个元素数组,是否可以使用 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 专门为区域确实重叠的情况提供函数memmove
。
因为你在这里被标记为 C++,你也可以考虑使用 std::copy
因为它的约束比 memcpy
弱:只是目标迭代器必须在外面要复制的范围,在您的场景中就是这种情况。
关于c++使用memcpy在数组内复制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44490069/