当前位置: 首页 > 知识库问答 >
问题:

C memcpy二维阵列

凌通
2023-03-14
#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);

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

共有1个答案

雷国兴
2023-03-14

大小是以字节为单位的,所以您只复制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]));
 类似资料:
  • 我是编程新手,我有一个任务要求从一维数组创建二维数组。我想到了这一点(没有任何外部来源的帮助,因为这会剥夺学习经验)。它适用于我们教授的测试输入,我只是想知道这是一个丑陋/低效的解决方案。 测试输入:twoDArray([1,2,3,4,5],3)输出将是:[[1,2,3],[4,5]]

  • 试图实施更大规模的井字游戏 这个游戏可以有超过3行和3列 每当发现4个连续的模式(水平,垂直或交叉) 选手是赢家 我已经找到了水平和垂直匹配的实现方法 但是找不到一种方法来识别2d数组中某个字符的交叉模式 考虑下面的二维数组 ` ` 如何检查“*”字符在这个2d数组中是否有四个连续的交叉模式

  • 我试着做一个Loto游戏,我必须生成一张随机的卡,在第一个collum数字从1-9,第二个10-19一直到90。这张牌的另一个规则是,每行的随机位置上只能有5个数字,这就是我遇到的麻烦。 我从这个开始在每个collum中添加数字: 然后在数组的每一行的一个数字位置上放5个数字我试过这样做: 第三个也一样。 输出: 0 18 0 0 46 0 61 72 88 0 18 0 31 0 55 0 0

  • 我试图将一个2d数组中的特定元素添加到另一个数组中,添加的过程是在数组的第一行选择最小的元素,并将该元素添加到同一位置的另一个2d数组中,例如: 2 22 3 5 1 54 7 3 10 20 22 21 这里,第一行中的最小元素是2,所以应该在相同的位置将2添加到另一个2d数组中,对于第二行,1是最小元素,所以我们也将1添加到另一个2d数组中,第三行中的最小元素是3,最后一行,第四行,最小的元素

  • 这段代码测试了一个标准的3×3tic tac toe游戏中的胜利。我的问题是,我如何改变里面的数字来匹配任何大小的棋盘,比如n×n? 目前,它检查第一行、第二行和第三行,以检查任何一个玩家是否在任何一行中获胜,接下来是列和对角线。但是,当板的大小更改为其他大小时,这将不再成立,因为它不会检查每一个可能的行/列/对角线。那么,对于尺寸为n×n的板,我该如何做到这一点。请不要代码,因为我不希望剽窃,但

  • 我正在为一款新游戏编写关卡编辑器。问题是,我不确定用什么结构来存储数据。 它是一个基于平铺的地图引擎,使用x和y坐标以及该位置的平铺id。 我有多层,地图是可调整大小的,所以数组可能会给我带来一些麻烦,这就是为什么我选择了d::向量。为了防止大量过载,我只在有人放置瓷砖时添加一个瓷砖,所以如果没有瓷砖,矢量大小为零,并且放置的瓷砖越多,矢量大小就越大。 还有我的向量: 问题是,在添加新的磁贴之前,