gpt4 book ai didi

c - 段错误: 11 while Reading File

转载 作者:行者123 更新时间:2023-11-30 21:20:17 25 4
gpt4 key购买 nike

我不知道为什么,但我无法阅读 txt文件,我收到了段错误 11 错误,但我不确定原因。我必须阅读之前写在 txt 文件上的迷宫。显然一切对我来说看起来都很好。大家有看出什么问题吗?

我非常感激。

enum directions {DIR_UP, DIR_DOWN, DIR_LEFT, DIR_RIGHT};

typedef struct {
int y, x;
enum directions d;

int lins, cols;
char **maze;
} t_maze;



t_maze *read_maze (char *file) {

FILE *f = fopen (file, "r");

if (!f) {
return NULL;
}

t_maze *my_maze = (t_maze *) malloc (sizeof (t_maze));
fscanf (f, "%d %d %d %d\n", &(my_maze->lins), &(my_maze->cols), &(my_maze->x), &(my_maze->y));


int lin;
my_maze->maze = (char **) malloc (my_maze->lins * sizeof (char *));
for (lin = 0; lin < my_maze->lins; lin++) {
my_maze->maze[lin] = (char *) malloc ((my_maze->cols) * sizeof (char));
}


lin = 0;
while (!feof (f)) {
int read, col = 0;
do {
read = getc (f);

if (read != '\n') {
my_maze->maze[lin][col++] = read;
}
} while (read != '\n');
lin++;
}

fclose (f);
return my_maze;
}

int main (int argc, char *argv[]) {
if (argc > 1) {

t_maze *m = read_maze (argv[1]);

return 0;
}

最佳答案

您可以在 getc 之后添加 ferror()检查读取错误。您还需要检查 read != EOF 。问题是,即使在检查了 feof() 之后,您也可能会使用 getc() 到达文件结尾。因此,内部循环必须包含 read != EOF 条件。

此外,您还必须检查 lincol 以免将值分配给未分配的内存。

 lin = 0;
while (!feof (f) && lin < my_maze->lins) {
int read, col = 0;
do {
read = getc (f);

if (ferror(f)) {
perror("Reading error");
exit (1);
}

if (read != '\n') {
my_maze->maze[lin][col++] = read;
}

} while (read != '\n' && read != EOF && col <= my_maze->cols);
lin++;
}

关于c - 段错误: 11 while Reading File,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40250686/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com