2

2 次元配列を別の 2 次元配列にコピーしようとしています。次の 2 つの配列が作成されています。

#define mapXcor 50
#define mapYcor 50

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

今、私のsecondStage[][]配列には値が入力されていますが、そうではありません.toの値をcurrentStage[][]割り当てたいです。だから私は以下の関数を作成しました: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;
}

コメント:

  • サイクルの配列インデックス制限が不適切です。コメントの下で修正された関数を探します。
  • サイクルの割り当てに間違ったインデックスがあります。繰り返しますが、コードをコメントアウトしました。
  • 1 つの配列を参照 (宛先) で渡した場合、ソースに定数参照を使用しないのはなぜですか?
  • 実際には、あなたのエリアは同じタイプを持っているので (同じタイプを持っていると定義することさえできます)、要素ごとにコピーする人はいません。私は memcpy() を使用しましたが、これはメモリ領域が重複していない場合にのみ有効です (この場合 - はい)。チェックman 3 memcpy
  • もっと勉強してください :-)
于 2013-04-16T21:50:55.987 に答える