填充2D char数组会导致C崩溃

时间:2013-01-25 18:14:24

标签: c arrays multidimensional-array char

我正在尝试使用文本文件中的字符填充二维数组(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

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:9)

int col, row = 0;为什么col未初始化为零。如果文件中的第一个字符是\n,那么它不会崩溃,因为所有剩余的情况都会发生崩溃(未定义的行为)。

int col = 0;
int row = 0;

答案 1 :(得分:1)

根据你的编译器,可能是那行和mapHeightd它不会得到一个anny值。 尝试:     int row = 0,col = 0;