【发布时间】:2021-11-18 13:57:33
【问题描述】:
我正在尝试使用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);
为什么上面的代码不起作用,我应该如何更正?
【问题讨论】:
-
memcpy()的第三个参数是要复制的字节数。为什么你只通过了 3 个? -
memcpy(arr_copy, arr, sizeof(arr_copy)) -
memcpy(arr_copy, arr, sizeof arr);应该这样做 - 或者for (int i = 0; i < 3; ++i) memcpy(arr_copy[i], arr[i], sizeof arr[i]);用于第二个版本 -
@TedLyngmo 在第一个(更简单的)版本中看不到任何 UB。每个数组都会占用连续的内存。
-
@Ted - 我在new question 中提出了这个问题。希望你不介意我引用你的话。 (另外,是 UB 是
int print函数不返回任何内容!)
标签: c multidimensional-array memcpy