fgets不是读完一行就返回0了吗,为什么这段程序可以读多行出来?

fgets不是读完一行就返回0了吗,为什么这段程序可以读多行出来?,第1张

在这里,fgets()函数是连同回车符一起读入到strbuf中的,所以,输出时液则也就不需要再输出'\n'了。只要它正确读到了数据,就返回strbuf的首地址,只有当失败或读到文件结尾返回NULL(此时才会退出循环)。

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

str-- 这是指向一个字符数组的指针,该数组存储了要读取的字符串。

n-- 这是要读取的最大字符数(包括最后的空字符)。通常是使用以 str 传递的数组长度。

stream-- 这是指向 FILE 对象的指针,该 FILE 对象标识了要从中读取字符的流。

功能

从指定的流 stream 读取一行,并把它存储在str所指向的字符串内。当读取(n-1)个字符时,或者读取到换行符时,或者到达文件末尾时,它会停止,具体视情况而定。

应用说明

如果文件中的该行,不足n-1个字符,则读完该行就结束。如若该行(包括镇吵最后一个换行符)的字符数超过n-1,则fgets只返回一个不完整的行,但是,缓冲区总是以NULL字符结尾,对fgets的下一次调用会继续读该行。函数成功将返回stream,失败或读到文件结尾返回NULL。因此不能直接通过fgets的返回值来判断函数是否是出错而终止的,应该借助feof函数或者ferror函数来判断。

返回值

如果成功,该函数返回相同的 str 参数。如果到达文件末尾或者没有读取到任何字符,str 的内容保持不变,并返回一个空指针。如果发生错误,返回一个空指针。

在读字符时遇到end-of-file,则eof指示器被御埋侍设置,如果还没读入任何字符就遇到这种情况,则stream保持原来的内容,返回NULL;

如果发生读入错误,error指示器被设置,返回NULL,stream的值可能被改变。

//用函数fputs写入时,可以通过写入\n或\r\n来写入换行符,但fputs不会自物和颂动在字符串的末尾追加换行符。

//函数fgets的原型是:char* fgets(char *str,int num,FILE *stream)。

//用函数fgets读取时,会从给出的文件流stream中读取[num - 1]个字符,

//并把它们转储到str(字符串)中, 但如果在读到[num - 1]个字符之前遇到了第一个换行符,

//会提前结束,并将换行符之前的字符连同这个换行符转储到str(字符串)中。

//下面有例子。

#include<stdio.h>

#include<stdlib.h>

#include<string.h>棚码

int main()

{

char f[]="t.txt",buf[1024]={'\0'}

FILE *io=fopen(f,"w")

fputs("第一罩郑行",io)

fputs(",还是第一行\n",io)

fputs("第二行\r\n",io)

fputs("第三行\n",io)

fputs("hello\nworld",io)

fclose(io)

io=fopen(f,"r")

fgets(buf,1024,io)

fclose(io)

puts(buf)

if('\n'==buf[strlen(buf)-1])

{

puts("读到了换行符。")

}

else

{

puts("未读到换行符。")

}

system("PAUSE")

return 0

}

fgets()函数用于从文件流中读取一行或指定个戚拆首数的字符,其原型为:

char * fgets(char * string, int size, FILE * stream)

参数说明:

string为一个字符数组,用来保存读取到的字符。

size为要读取的字符的个数。如果该行字符数大于size-1,则读到 size-1 个字符时结束,并在最后补充' \0';如果该行字符数小于等于 size-1,则读取所有字符,并在最后补充 '\0'。即,每次最多读取 size-1 个字符。

stream为文件流指针。

【返回值】读取成功高数,返回读取到的字符串,即string;失败或读到文件结尾返回NULL。因此我们不能直接通过fgets()的返回值来判断函数是否是出错而终止的,应该借助feof()函数或者ferror()函数来判断。

注意:fgets()与gets()不一样,不御枯仅仅是因为gets()函数只有一个参数 FILE *stream,更重要的是,fgets()可以指定最大读取的字符串的个数,杜绝了gets()使用不当造成缓存溢出的问题。


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

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

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

发表评论

登录后才能评论

评论列表(0条)

保存