在这里,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()使用不当造成缓存溢出的问题。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)