我试图从.txt文件读取20x20迷宫到2D数组。因为fgets也读取NUL和n,所以我为每行留出了22个字符的空间(迷宫为20个字符)。
然而,它并没有按我想要的方式工作。
当我测试这段代码只打印一个数组(例如maze[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;
}
您反向声明了数据类型。你需要:
char maze[20][BUFLEN];
这将给你20"行"的BUFLEN
字符。
首先,如果您有一个包含20个大小为22的缓冲区的数组,则必须声明一个数组char maze[20][22];
,而不是char maze[22][20];
,因为这将显示您在遍行数组时被2*row_index
字符替换的所有字符串。
第二,如果你用#define BUFLEN 22
定义了一个常量,请使用来定义char maze[20][BUFLEN];
。如果您决定稍后更改常数,这将为您节省很多麻烦。这是定义常量的用途。
第三,正如你对BUFLEN
所做的那样,你也可以对MAZESIZE
做,产生:
#define MAZESIZE 20
#define BUFFSIZE ((MAZESIZE) + 2) /* to allow for n and chars. */
...
char maze[MAZESIZE][BUFSIZE];
然后,您可以更改MAZESIZE
常量(或者BUFFSIZE
,如果您决定稍后消除'n'
),而不必查看使用它的位置。