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 }
结果如下: