gpt4 book ai didi

c - 为什么我在 while 循环中遇到这样的限制时会出现段错误?

转载 作者:太空宇宙 更新时间:2023-11-04 04:15:32 26 4
gpt4 key购买 nike

我目前正在编写一个代码,该代码必须能够逐行从预先存在的文件中读取一行,并使用 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) != NULLi < 47 之前得到评估.当 i = 47 时,这将越界写入.

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

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

关于c - 为什么我在 while 循环中遇到这样的限制时会出现段错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52821770/

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