将部分2D数组复制到C中的另一个2D数组中

时间:2017-08-02 18:53:48

标签: c arrays

我想编写一个C代码,它接受一个2D数组的块并使用memcpy函数将其复制到另一个2D数组中。在我包含的特定代码中,我尝试将2x4数组matrix的最后3列复制到2x3数组mat_copy中。

double matrix[2][4] = {{0, 1, 2, 3}, {4, 5, 6, 7}};
double mat_copy[2][3];
double sz = sizeof(mat_copy)/2;

for (int i = 0; i < 2; i++) {
    memcpy(&mat_copy[i][1], &matrix[i][1], sz);
}

我得到了输出:[0, 1, 2; 3, 5, 6]而不是[1, 2, 3; 5, 6, 7]。一旦在内存中提供初始指针,memcpy函数如何选择要复制的地址?我知道我的错误与处理2D数组有关,但我不知道如何更改它。

2 个答案:

答案 0 :(得分:2)

您从目的地的1开始而不是0,因此您要复制到该行的末尾。

更改

memcpy(&mat_copy[i][1], &matrix[i][1], sz);

memcpy(&mat_copy[i][0], &matrix[i][1], sz);

答案 1 :(得分:1)

要复制最后3列,必须将列0的偏移量作为目标传递。您可以通过这种方式进一步简化代码:

double matrix[2][4] = {{0, 1, 2, 3}, {4, 5, 6, 7}};
double mat_copy[2][3];

for (int i = 0; i < 2; i++) {
    memcpy(mat_copy[i], &matrix[i][1], sizeof(mat_copy[i]));
}