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

标签 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 编译器。

最佳答案

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

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

关于c++使用memcpy在数组内复制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44490069/

相关文章:

c - memcpy 和二维数组

c++ - 如何将 memcpy 与 unique_ptr 一起使用

c - Memcpy() 适用于越界内存?

c++ - 如何使用 QT 创建带有 pair 标签的 Child

c++ - O* p = 新的 O[5]; p 指向什么?

c++ - 使用欧几里得公式查找所有毕达哥拉斯三元组

c++ - 快速复制 `std::vector<std::uint8_t>`

CUDA 设备到主机数据传输错误

c++ - 遇到 Mergesort 的比较和排序部分的问题 (c++)

c++ - 我不明白程序中 next 和 prev 之间的值是如何变化的?