从文件读取到2D数组

时间:2015-09-03 01:30:05

标签: c arrays multidimensional-array

我试图将.xxt文件中的20x20迷宫读入2D数组。 因为fgets也会读取NUL和\ n,所以我每行留出22个字符(迷宫为20个字符)。

然而,它并不像我预期的那样工作。

当我测试此代码只打印一个数组(例如迷宫[0])时,似乎整个文件被复制到一个数组中。

我做错了什么?

#include <stdio.h>
#define BUFLEN 22

int main()
{
    FILE *fp = fopen ("maze.txt", "r"); 
    char maze[22][20];
    int i = 0;
    int j = 0;

    for (i=0; i<20; i++){
        fgets(maze[i], BUFLEN, fp);
    }
    for (j=0; j<20; j++){
        printf("%s", maze[j]);
    }
    fclose(fp);
    return 0;

}

2 个答案:

答案 0 :(得分:3)

您向后声明了自己的数据类型。你需要:

char maze[20][BUFLEN];

这会给你20行&#34;行#34; BUFLEN个字符。

答案 1 :(得分:0)

首先,如果您有一个包含20个大小为22的缓冲区的数组,则必须声明一个数组char maze[20][22];,而不是char maze[22][20];,因为这将显示所有被{{{{}}替换的字符串步行数组时会出现1}个字符。

其次,如果您已使用2*row_index定义常量,请使用来定义#define BUFLEN 22。如果您决定稍后更改常量,这将为您省去很多麻烦。这是使用常量定义的。

第三,正如你对char maze[20][BUFLEN];所做的那样,你可以用BUFLEN完成,屈服于:

MAZESIZE

然后,您可以更改#define MAZESIZE 20 #define BUFFSIZE ((MAZESIZE) + 2) /* to allow for \n and \0 chars. */ ... char maze[MAZESIZE][BUFSIZE]; 常量(或MAZESIZE,您决定稍后消除BUFFSIZE的情况),而不必查看您使用它的位置。