我想编写一个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数组有关,但我不知道如何更改它。
答案 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]));
}