fgets c标准库函数

时间:2017-02-19 00:37:44

标签: c

/ * 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

欢呼

1 个答案:

答案 0 :(得分:2)

  

为什么不是返回语句return (c == EOF) ? NULL : s;

因为如果cs != s显然在文件结束之前成功读取了一些字节,或者遇到了错误,那么fgets()返回NULL显然是错误的在到达文件末尾之前成功读取了一些内容。

相关问题