头文件:include<stdio.h>
fgets()函数用于从文件流中读取一行或指定个数的字符,其原型为:
char * fgets(char * string, int size, FILE * 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;
- }
运行结果:
程序首先创建一个空文件,并利用fputs()函数写 入两行字符串,刷新关闭。然后重新以只读的方式打开该文件, 使用fgets()函数连续两次读取该文件,第一次读取3-1个字符,第 二次读取一行。最终结果都显示出来。