2

我正在尝试将二维数组复制到另一个二维数组中,我创建了这两个数组:

#define mapXcor 50
#define mapYcor 50

char secondStage    [mapXcor][mapYcor];
char currentStage   [mapXcor][mapYcor];
//mapXcor and mapYcor are constant integers

现在我的secondStage[][]数组上填充了值,但currentStage[][]不是,我想分配 to 的secondStagecurrentStage。所以我创建了下面的函数:

void populateArray(char (&arrayA)[mapXcor][mapYcor], char arrayB[mapXcor][mapYcor]) {
    for(int a = 0; a < mapXcor + 1; ++a) {
        for(int b = 0; b < mapYcor + 1; ++b) {
            arrayA[mapXcor][mapYcor] = arrayB[mapXcor][mapYcor];
        }
    }
}

populateArray(currentStage[mapXcor][mapYcor],secondStage[mapXcor][mapYcor]);

但是当我使用该功能时,它给了我一个错误:

1 IntelliSense:“char (&)[20][50]”类型的引用(非 const 限定)不能用“char”类型的值初始化

2 IntelliSense:“char”类型的参数与“char (*)[50]”类型的参数不兼容

我该如何解决这个问题?

4

3 回答 3

3

更改 for 循环中的赋值语句:

arrayA[mapXcor][mapYcor] = arrayB[mapXcor][mapYcor];

经过

arrayA[a][b] = arrayB[a][b];
于 2013-04-16T21:14:23.750 回答
2

您可能正在尝试访问的代码。不要给老师看 :-) - 实际编程的内容太多了。只需查看然后编写您自己的解决方案:

#include <string.h>
#include <stdio.h>

#define mapXcor 5
#define mapYcor 5

static char secondStage    [mapXcor][mapYcor];
static char currentStage   [mapXcor][mapYcor];

void populateArray(char (&arrayA)[mapXcor][mapYcor], const char (&arrayB)[mapXcor][mapYcor]) {
/*
    for(int a = 0; a < mapXcor; ++a) {
        for(int b = 0; b < mapYcor; ++b) {
            arrayA[a][b] = arrayB[a][b];
        }
    }
*/
    memcpy(arrayA, arrayB, sizeof(arrayB));
}

int main()
{
    for(int a = 0; a < mapXcor; ++a) {
        for(int b = 0; b < mapYcor; ++b){
            currentStage[a][b] = a*b + 10*a;
        }
    }

    populateArray(secondStage, currentStage);

    for(int a = 0; a < mapXcor; ++a) {
        for(int b = 0; b < mapYcor; ++b){
            printf("%2i ", secondStage[a][b]);
        }
        printf("\n");
    }

    return 0;
}

注释:

  • 您在循环中有错误的数组索引限制。在评论下寻找更正的功能。
  • 您在循环分配中有错误的索引。再次,注释掉代码。
  • 如果您通过引用(目标)传递一个数组,为什么不对源使用常量引用?
  • 实际上,由于您的区域具有相同的类型(您甚至可以将它们定义为具有相同的类型),因此没有人按元素复制它们。我使用过 memcpy() 但这只有在内存区域不重叠时才有用(在这种情况下 - 是的)。检查man 3 memcpy
  • 努力学习:-)
于 2013-04-16T21:50:55.987 回答
0
#define ROWS 2
#define COLS 2

void copyArray(char (&arrayA)[ROWS][COLS], const char (&arrayB)[ROWS][COLS] ) {

    memcpy(arrayA, arrayB, sizeof(arrayB));
}

int main(void){

    char arr1  [ROWS][COLS];
    char arr2  [ROWS][COLS];

    // init arr1
    copyArray(arr2, arr1);

    return 0;
}
于 2018-03-20T14:31:14.010 回答