首页 > 解决方案 > 为什么我的 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++;
                }
        }

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

标签: csegmentation-fault

解决方案


因为fgets(line[i], 500, fp) != NULL之前被评估过i < 47。这将在i = 47.

尝试更改循环评估中的顺序:

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

推荐阅读