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("%sn", line[i]);
i++;
while (!feof(fp)) {
while (fgets(line[i], 500, fp) != NULL && i < 47) {
printf("%d", i);
printf("%sn", line[i]);
i++;
}
}

在此之后有一些代码,但这是遇到错误的地方。

因为fgets(line[i], 500, fp) != NULLi < 47之前被评估。 这将在i = 47时写出越界。

尝试更改循环 eval 中的顺序:

while (i < 47 && fgets(line[i], 500, fp) != NULL)

相关内容

  • 没有找到相关文章