从文本文件中读取多行字符

时间:2014-01-12 14:55:32

标签: c multidimensional-array

我必须从文件中读取迷宫并将其存储在二维数组中。 我正在阅读的字符存储在.txt文件中,如下所示:

######
#....#
#..#.#
. .#..
######

请注意,行数和列数可能因文件而异。 我到目前为止阅读文件的方法是:

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

void read_arr(char** a, int x_size, int y_size) {
    int i, j;
    int tmp;

    FILE* file = fopen("lab1.txt", "r");

    for (i = 0; i < y_size; i++) {
        for (j = 0; j < x_size; j++) {
            if (tmp = fgetc(file))
                a[j][i] = tmp;
            printf("Success\n");
        }
    }
}

void print_arr(char** a, int x_size, int y_size) {
    int i, j;

    for (i = 0; i < x_size; i++) {
        for (j = 0; j < y_size; j++) {
            printf("%c", a[i][j]);
        }
        printf("\n");
    }
}

int main() {
    int x_size, y_size;

    printf("What is the size of the maze (<x> <y>)? "); 
    scanf("%d %d", &x_size, &y_size);
    printf("Maze has size %dx%d\n", x_size, y_size);

    char** a = malloc(sizeof(char) * (x_size * y_size));
    if (!a)
        return -1;

    printf("Successfully allocated memory!\n");

    read_arr(a, x_size, y_size);
    print_arr(a, x_size, y_size);
    return 0;
}

但我得到的只是一个内存错误(我担心我无法提供确切的错误信息,因为它以德语显示)。 我尝试过的另一件事是使用fscanf,但这也不起作用。 我在Ubuntu上,并使用gcc编译我的代码。 任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:3)

内存分配不正确

char** a = malloc(sizeof(char) * (x_size * y_size));

我想你想做的是

char** a = malloc(sizeof(char*) * y_size);
for(i = 0; i < y_size; ++i)
    a[i]=malloc(x_size);

同样在read_arr函数中,你访问数组为arr [j] [i],而j是你的内部索引,我是外部

for (i = 0; i < y_size; i++) {
    for (j = 0; j < x_size; j++) {
        if (tmp = fgetc(file))
            a[j][i] = tmp; ==> a[i][j] = tmp;
        printf("Success\n");
    }
}