gpt4 book ai didi

C memcpy 二维数组

转载 作者:行者123 更新时间:2023-12-05 08:36:23 45 4
gpt4 key购买 nike

我正在尝试使用 memcpy 将一个二维数组复制到另一个。我的代码:

#include <stdio.h>
#include <string.h>

int print(int arr[][3], int n) {
for (int r = 0; r < 3; ++r) {
for (int c = 0; c < n; ++c)
printf("%d ", arr[r][c]);
printf("\n");
}
}

int main() {
int arr[3][3] = {
{1, 2, 3},
{4, 5, 6},
{7, 8, 9}
};
int arr_copy[3][3];

print(arr, 3);
memcpy(arr_copy, arr, 3);
print(arr_copy, 3);

return 0;
}

结果:

1 2 3 
4 5 6
7 8 9
-1426063359 32726 -1902787872
22012 0 0
-1902788416 22012 48074240

我也试过:

for (int i = 0; i < 3; ++i)
memcpy(arr_copy[i], arr[i], 3);

为什么上面的代码不起作用,我应该如何更正?

最佳答案

大小以字节为单位,因此您只复制 3 个字节 - 甚至不是一个整数。

memcpy(arr_copy, arr, 3);

您可以通过打印其大小(以字节为单位)来查看您的数组有多大:

printf("sizeof(arr) = %zu\n", sizeof(arr));

所以正确的memcpy代码应该是:

memcpy(arr_copy, arr, sizeof(arr));

同样的错误:

memcpy(arr_copy[i], arr[i], 3);

它必须是:

memcpy(arr_copy[i], arr[i], sizeof(arr[i]));

关于C memcpy 二维数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69329303/

45 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com