char * fgets(const char *buff,int max,FILE *fp)

功能:从指定的文件中最多读取max-1个字符,存储到内存的buff区域。

读到什么时候停止?有三种情况

case1:遇到第一个换行符时,读完换行符后,停止。(没错,它读了换行符,和fscanf函数不一样)

case2:读取到字符个数为max-1时停止

case3:遇到文件结束符(换句话来说就是读取到文件结尾),然后fgets()函数会向末尾添加一个空字符以构成一个字符串。所以字符串的最大长度代表字符的最大数目再加上一个空字符。

对于case2:

如果fgets()函数在达到字符最大数目之前读完了一整行,它将在字符串的空字符之前添加一个换行符以标识一行结束。这是fgets()函数和gets()函数的不同之处,后者读取换行符后将其丢弃。

参数:第一个参数为char 数组的名称,第二个参数是max为字符串的最大长度,第三个参数为FILE指针

返回值:fgets()遇到eof的时候会返回null值,可以据此检查文件结尾。否则,它返回传递给它的地址值。

想知道fgets()函数三种读取结束的情况,于是用了一段代码测试。

文本如下:

 

 

如下:

 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 
 4 int main()
 5 {
 6     FILE *fp;
 7     int num=0L;
 8     char ch;
 9     char buffer[100];
10     char *b;
11     int i;
12     if((fp=fopen("test.dat","r"))==NULL){
13         fprintf(stderr,"Can't open this file.\n");
14         exit(1);
15     }
16     while(1){
17         b=fgets(buffer,4,fp);
18         if(feof(fp))
19             break;
20         printf("\n======\n\"");
21         while(*b!='\0')
22             printf("%c ",*b++);
23         //fputs(b,stdout);
24        // printf("\n");
25        printf("\"\n======\n");
26         num++;
27 
28         for(i=0;i<10;i++)
29             printf("buffer[%d]=%c  ",i,buffer[i]);
30     }
31     printf("num=%ld",num);
32     fclose(fp);
33     return 0;
34 }

结果如下: