2014-01-12 116 views
0

我必須從文件中讀取迷宮並將其存儲在二維數組中。 我讀的字符被存儲在一個.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; 
} 

但所有我從這個得到的是一個內存錯誤(我怕我cant't給出確切的錯誤消息,因爲它會顯示在德國)。 我試過的另一件事是使用fscanf,但那也不起作用。 我在Ubuntu上,並使用gcc編譯我的代碼。 任何幫助將不勝感激!

+0

'字符** A = malloc的(的sizeof(char)的*(X_SIZE * Y_SIZE));'對指針分配空間,但不數據。 – chux

+0

「我不能給出確切的錯誤信息,因爲它是用德語顯示的」 - 我不明白爲什麼這使得它不可能給它。爲什麼不改變語言環境? –

+0

這是它:「Speicherzugriffsfehler(Speicherabzug geschrieben)」 – refl3x

回答

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],而Ĵ是你的內側索引,i是外

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"); 
    } 
}