c - C memcpy 二维数组
问题描述
我正在尝试将一个二维数组复制到另一个使用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]));
推荐阅读
- java - 如何使用 OpenJ9 Xtrace 选项转储方法参数的内容
- powershell - 如何使用 PowerShell 中的函数从命令行执行?
- javascript - 如何使用模式更改工具提示的外观:Chart.js 中的索引
- raku - (标识符)术语与常量与空签名例程
- ios - Swift:TableViewController 中的 UIControl 在被 ViewController 调用时发现为零
- c# - 从现有字符串构建新的类似路径的字符串
- java - 针对不同用户的单独活动
- sql - 使用通配符加入
- node.js - 无法在nodejs中获取基板序列号
- javascript - 删除字符