c - 为什么我的 while 循环有这样的限制会导致分段错误?
问题描述
我目前正在编写一个代码,该代码必须能够逐行从预先存在的文件中读取一行,用 strep() 分隔行中的不同字符串。目前,它正在成功读取和打印每一行(总共有 47 行)。但是,在它读取并打印最后一行之后,它遇到了分段错误。据我了解,这意味着代码试图访问不存在的东西(例如“int array [5];”中的数组元素8。我不明白它在什么时候试图访问这样的元素。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, char *argv[]) {
FILE *fp = fopen(argv[1], "r");
int i = 0, j;
char line[47][500];
fgets(line[i], 500, fp);
printf("%d", i);
printf("%s\n", line[i]);
i++;
while (!feof(fp)) {
while (fgets(line[i], 500, fp) != NULL && i < 47) {
printf("%d", i);
printf("%s\n", line[i]);
i++;
}
}
之后有一些代码,但这是遇到错误的地方。
解决方案
因为fgets(line[i], 500, fp) != NULL
之前被评估过i < 47
。这将在i = 47
.
尝试更改循环评估中的顺序:
while (i < 47 && fgets(line[i], 500, fp) != NULL)