我有一个关于fgets()
的问题
char *fgets(char *str, int strsize, FILE *stream);
fgets()
'文档显示:成功时,函数返回相同的str参数如果遇到文件结尾且未读取任何字符,str的内容将保持不变,并返回空指针。
如果发生错误,则返回空指针。
您如何区分以上两种情况-fgets到达EOF(文件结尾)和读取文件时出错?
此外,当fgets读取文件时发生错误时,fgets是否会跟踪str中到该点为止读取的内容?
如何检查fgets是否立即到达EOF?
最佳答案
提到你的第一个问题:
您如何区分以上两种情况-fgets到达EOF(文件结尾)和读取文件时出错?
如果fgets()
返回空值,则为刚才与ferror()
调用一起使用的文件指针调用fgets()
,后者返回NULL
如果ferror()
返回非零值,则fgets()
失败,否则它已到达文件末尾。
例子:
#include <stdlib.h>
#include <stdio.h>
#include <errno.h>
#define LINE_LEN_MAX (42)
int main(int argc, char ** argv)
{
if (1 >= argc)
{
errno = EINVAL;
perror("main() failed");
exit(EXIT_FAILURE);
}
{
FILE * fp = fopen(argv[1], "r");
if (NULL == fp)
{
perror("fopen() failed");
exit(EXIT_FAILURE);
}
for (char line[LINE_LEN_MAX];
NULL != fgets(line, LINE_LEN_MAX, fp);)
{
printf("%s", line);
}
if (0 != ferror(fp))
{
perror("fgets() failed");
exit(EXIT_FAILURE);
}
fclose(fp);
}
return EXIT_SUCCESS;
}
另一个问题可以从the docs直接回答:
问题3:
如何检查fgets是否立即到达EOF?
回答:
如果遇到文件结尾,并且数组中未读取任何字符,则数组的内容保持不变,并返回空指针
问题2:
当fgets读取文件时发生错误时,fgets是否跟踪str中到该点为止读取的内容?
回答:
如果在操作期间发生读取错误,则数组内容不确定,并返回空指针。
关于c - 如何区分到达EOF和到达错误的fget,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58461952/