gpt4 book ai didi

c++ - fgets 只读取文件的第一行

转载 作者:太空宇宙 更新时间:2023-11-04 05:12:27 24 4
gpt4 key购买 nike

我正在尝试从我的 .cpp 文件中读取一个文件。我正在使用 C 库,所以请不要混淆。

所以问题就和我标题说的一样清楚了。 fgets 方法可以读取第一行,但是当涉及到第二行时,它既不能读取第二行也不能读取文件的其余部分(因为它会在出现问题时退出)。

可以找到相关部分代码:

void read_input()
{
int i = 0, N = 5;
char str[STR_SIZE], line[STR_SIZE];
FILE *fp;

fp = fopen("out", "r");
if (!fp)
{
fprintf(stderr, "error: file could not be opened\n");
exit(1);
}

for (i = 0; i<2; i++)
{
if (fgets(str, STR_SIZE, fp) == NULL)
{
fprintf(stderr, "error: failed at file reading\n");
exit(1);
}

if (feof(fp))
{
fprintf(stderr, "error: not enough lines in file\n");
exit(1);
}

if ((sscanf(str, "%s", line) != 1) )
{
fprintf(stderr, "error: invalid file format\n");
exit(1);
}
printf("%d\t%s\n", i, line);
fclose(fp);
}
}

最佳答案

我相信,问题就在那里,因为您在循环中使用了 fclose(fp);。因此,在第一次迭代之后,fp 被传递给 fclose() 并且在任何进一步的迭代中重复使用 fp 将调用undefined behavior因为 fp 不再是 valid

解决方案:将 fclose(fp); 移到循环之外。

关于c++ - fgets 只读取文件的第一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36735701/

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