关于C语言fgets()读取文件?

关于C语言fgets()读取文件?,第1张

C语言中fgets()函数说明:fgets()用来从参数stream 所指的文件内读入字符并存到参数s 所指的内存空间,直到出现换行字符、读到文件尾或是已读了size-1 个字符为止, 最后会加上NULL 作为字符串结束。

原型  char *  fgets(char * s, int n,FILE *stream)

参数:

s: 字符型指针,指向存储读入数据的缓冲区的地址。

n: 从流中读入n-1个字符。

stream : 指向读取的流。

返回值:

        1. 当n<=0 时返回NULL,即空指针。

        2. 当n=1 时,返回空串""。

        3. 如果读入成功,则返回缓冲区的地址。

        4. 如果读入错误或遇到文件结尾(EOF),则返回NULL。

 标准库中fgets(...)的实现如下:

   char *fgets(char *s, int n,  FILE *stream)

               {

                    register int c

                    register char *cs

                    cs=s

                    while(--n>0 &&(c = getc(stream))!=EOF)

                         if ((*cs++=  c) =='\n')

                           break

                     *cs ='\0'

                     return (c == EOF && cs == s) ?NULL :s 

                   }

如果文件末尾有一个空行,注意特别注意用fgets进行读,比如文件:

aaa 234 444 bbb

123 kkk 9 00 00000 0000

ccc 34

如果最后没有空行,即没有\n,读到ccc 34这行时,fgets遇到了EOF,结束,str="ccc 34\0"如果最后有空行;读到ccc 34这行时,fgets遇到了new line,str="ccc 34\n\0",此时文件未返回EOF,再次fgets时,遇到EOF,fgets返回NULL,str的内容没有变,因此用fgets读时判断是否该结束最好如此:

while(fgets(...)) {

...

}

而不要用

while(!feof()) {

fgets()

...

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/8008045.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-12
下一篇 2023-04-12

发表评论

登录后才能评论

评论列表(0条)

保存