2025年4月2日 星期三 乙巳(蛇)年 正月初三 设为首页 加入收藏
rss
您当前的位置:首页 > 计算机 > 编程开发 > C语言

C语言fgets()函数:从文件流中读取一行或指定个数的字符

时间:12-29来源:作者:点击数:127

头文件:include<stdio.h>

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()使用不当造成缓存溢出的问题。

【实例】从myfile.txt文件中读取最多99个字符。

  • #include <stdio.h>
  • int main()
  • {
  • FILE * pFile;
  • char mystring [100];
  • pFile = fopen ("myfile.txt" , "r");
  • if (pFile == NULL)
  • perror ("Error opening file");
  • else {
  • if ( fgets (mystring , 100 , pFile) != NULL )
  • puts (mystring);
  • fclose (pFile);
  • }
  • return 0;
  • }

又如,使用fputs()写一个文件,然后fgets()读取文件内容并显示。

  • #include <stdio.h>
  • #include<stdlib.h>
  • #include<io.h>
  • #include<conio.h>
  • int main(void)
  • {
  • char msg[] = "This is a test!\n secend line\n";
  • char msgget[100];
  • int i = 0;
  • FILE* fstream;
  • fstream = fopen("test.txt","w+"); /*打开文件*/
  • if(fstream==NULL)
  • {
  • printf("Open file failed!\n");
  • exit(1);
  • }
  • fputs(msg, fstream); /*写入文件*/
  • fflush(fstream);
  • close(fileno(fstream));
  • fstream=fopen("test.txt","r");
  • i = 0;
  • fgets(msgget,3,fstream) ;
  • fputs(msgget, stdout);
  • printf("\n");
  • fgets(msgget,100,fstream) ;/*从流中读取一行或者指定个数字符*/
  • fputs(msgget, stdout); /*送一个字符串到流中*/
  • return 0;
  • }

运行结果:

Th
is is a test!

程序首先创建一个空文件,并利用fputs()函数写 入两行字符串,刷新关闭。然后重新以只读的方式打开该文件, 使用fgets()函数连续两次读取该文件,第一次读取3-1个字符,第 二次读取一行。最终结果都显示出来。

方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门