/ * fgets: get at most n chars from iop * /
char * fgets(char * s, int n, FILE * iop)
{
register int c;
register char * cs;
cs = s;
while (-n > 0 && (c = getc(iop)) != EOF)
if (( * cs++ = c) == ′\n′)
break;
*cs = ′\0′;
return (c == EOF && cs == s) ? NULL : s;
}
请问我的问题是为什么cs == s,在return语句中。因为fgets应该返回NULL,如果文件结束或发生错误,为什么返回语句只返回(c == EOF)? NULL:s;
getc,也是一个c标准库函数,它从文件iop指向的一次读取一个字符。函数fgets从文件iop中读取一行,并且如果成功返回,则读取行,存储在字符数组s中。如果遇到文件结尾或发生错误,则返回NULL
欢呼答案 0 :(得分:2)
为什么不是返回语句
return (c == EOF) ? NULL : s;
因为如果cs != s
显然在文件结束之前成功读取了一些字节,或者遇到了错误,那么fgets()
返回NULL
显然是错误的在到达文件末尾之前成功读取了一些内容。