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()
...
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)