在 C++ 中复制动态数组中的静态数组

copy static array in a dynamic array in c++

提问人:El ayoub 提问时间:8/24/2023 最后编辑:Some programmer dudeEl ayoub 更新时间:8/24/2023 访问量:29

问:

此代码的主要目标是将部分字符串从 myArray 复制到 neuArray,然后将复制的字符串从 neuArray 输出到控制台。 代码正常工作,但不是 100%,因为我收到以下报告:在位置 0xFFFFFFFFFFFF 读取时访问冲突。

有人可以帮忙吗?提前致谢

string myArray[5];

const int len = (sizeof(myArray) / sizeof(myArray[0]));

myArray[0] = ausgabe; // die ausgabe ist ein binäre string 0101

const int x = 5;
const int y = 1;



string neuArray[x + y] = {};

memcpy(neuArray, myArray, len * (sizeof(string)));

for (int i = 0; i < x + y; i++) {
    cout << neuArray[i] <<endl;}
数组 字符串 c++17 复制构造函数

评论


答:

-1赞 Some programmer dude 8/24/2023 #1

您显示的代码的问题在于您使用了 C 函数。它将创建一个浅层字节复制,它不会像 C++ 预期的那样调用对象复制语义。memcpy

这意味着当您尝试访问“复制”对象时,您将有未定义的行为

您应该改用 std::copy:

std::copy(std::begin(myArray), std::end(myArray), std::begin(neuArray));

或者,当您明确需要动态数组时,请停止使用固定大小的数组,因此应该改用。std::vector

评论

0赞 El ayoub 8/24/2023
什么时候可以在 C++ 中使用函数 memcpy() ??
0赞 Some programmer dude 8/24/2023
@Elayoub 为了安全起见:从不。一旦你获得了更多的经验,你就会知道什么时候可能。