0

テキスト ファイルの文字を 2 次元配列 (mapLayout) に入力しようとしています。

printf を使用して文字を読み取り中に出力すると、すべて問題ないように見えますが、文字を配列に追加する実際の行がクラッシュを引き起こしているようです。

#include <stdio.h>
#include <stdlib.h>

void createMap();

//height of file being read
int mapHeight, mapWidth = 20;
char mapLayout[20][20];

int main()
{
    createMap();
    return 0;
}

//read in string from file and populate mapLayout with chars
void createMap(){
    FILE *file = fopen("map.txt", "r");
    int col, row = 0;
    int c;

    if (file == NULL)
        return NULL; //could not open file

    while ((c = fgetc(file)) != EOF)
    {
        printf("%c", c);
        printf("\nx:%d, y:%d\n", col, row);

        if(c == '\n'){
            row++;
            col = 0;
        }else{
            mapLayout[col][row] = c;        //<--  This line seems to be the problem
            col++;
        }

    }

    return;
}

私が読んでいるファイルは、地図の 20 x 20 表現です。ここにあります:

xxxxxxxxxxxxxxxxxxxx
xA                 x
x                  x
x                  x
xxxxxxxxxxxxxxxx   x
x                  x
x                  x
x                  x
x                  x
x                  x
x    xxxxxxxxxxxxxxx
x           x      x
x           x      x
x           x      x
x           x      x
x           x      x
x     xxxxxxx      x
x                  x
x                 Bx
xxxxxxxxxxxxxxxxxxxx

どんな助けでも大歓迎です。

4

2 に答える 2

9

int col, row = 0;colゼロに初期化されない理由。ファイルの最初の文字が の場合は\nクラッシュしませんが、残りのすべての場合にクラッシュが発生します (未定義の動作)。

行う

int col = 0;
int row = 0;
于 2013-01-25T18:17:29.673 に答える
1

コンパイラによっては、そもそもその行と mapHeightd が any 値を取得できない可能性があります。試してみてください: int 行 = 0、列 = 0;

于 2013-01-25T18:20:36.343 に答える