我可以通过以下方式使用fgets:
FILE *fp = fopen("text.txt", "r");
if(fp == NULL)
return 1;
char line[50];
fgets(line, 50, fp);
// do more stuff
这会根据文件中的字符填充line
,因此为什么会fgets()
需要返回指向line
的指针? line
现在包含我需要的数据,那么返回指向它的指针有什么用呢?
答案 0 :(得分:3)
因为fgets(3)和POSIX fgets中都记录了这一点。
此外,如果您确定它确实返回了非NULL
指针(即它没有失败),您可以将其结果用作其他函数的参数。我认为不测试它是错误的。
答案 1 :(得分:1)
因为它必须返回一些东西来指示错误。在创建时,返回指针从gets
平滑过渡。它是程序员编写的程序员友好的: - )
答案 2 :(得分:0)
它在EOF或错误上返回NULL,因此它为您提供了一种检测呼叫成功或失败的简便方法:
if ( fgets( line, sizeof line, fp ))
{
// do something with line
}
else
{
// read failed
}
为什么指针与整数值相对?正如其他人所提到的,gets
返回了一个指针值,因此这使得替换任何现有的gets
调用变得容易(尽管换行语义不同,所以它不是一个完全无痛的变化)。 / p>
为什么gets
会返回一个指针?这对丹尼斯·里奇来说是一个问题;不幸的是,他不再能够回答。
答案 3 :(得分:0)
使用fgets()
返回值来区分预期结果与其他结果。
char *fgets(char * restrict s, int n, FILE * restrict stream);
会返回s
或NULL
。
发生文件结束条件(EOF)或发生I / O错误时,将返回NULL
。
if (fgets(line, sizeof line, fp)) { // best to use sizeof buffer @John Bode
// do more stuff
}
else {
// Handle EOF/IO errors.
// In typical practise, only 1 of these 2 conditions are true.
if (ferror(fp)) Handle_IOError();
if (feof(fp)) Handle_EOF();
}