c++ 为什么动态数组的动态副本输入不完整且带尾数?

e4eetjau  于 2022-11-19  发布在  其他
关注(0)|答案(1)|浏览(111)

我做了一个动态数组的动态副本,副本中的元素没有完全输出,而且有些数字的打印格式不对。
我的代码:

// the function which outputs the elements of the array
void array_transform (double* num_array_1) {
for (int i = 0; i < sizeof(num_array_1); i++)
{
    cout << num_array_1[i] << endl;
}
// the code creating the copy
double* num_array_1 = new double[n];
memcpy(num_array_1, num_array, 4 * n);

原始数组元素:

Array elements:
i       1       2       3       4       5       6       7       8       9       10
Number  42      68      35      1       70      25      79      59      63      65

拷贝的输出:

42.00
68.00
35.00
1.00
70.00
-6277438562204192487878988888393020692503707483087375482269988814848.00
-6277438562204192487878988888393020692503707483087375482269988814848.00
-6277438562204192487878988888393020692503707483087375482269988814848.00

请告诉我为什么会发生这种情况以及如何修复此错误。

evrscar2

evrscar21#

memcpy是有风险的,因为你可能会把要复制的大小弄错。这是你犯的错误。
正确的代码是

memcpy(num_array_1, num_array, sizeof(double) * n);

但是一个更好的复制方法是使用std::copy,因为使用std::copy,你不必指定要复制的元素的大小。

#include <algorithm>

std::copy(num_array, num_array + n, num_array_1);

相关问题