C/C++ fgets函数详解

fgets函数

    • 一、fgets函数简介
    • 二、fgets
      • 1、fgets函数头文件
      • 2、fgets函数声明
      • 3、fgets函数形参、返回值
      • 4、使用示例
      • 5、fgets函数实现
    • 三、总结


一、fgets函数简介

fgets函数功能为从指定的流 stream 读取一行,并把它存储在str所指向的字符串内。当读取(n-1)个字符时,或者读取到换行符时,或者到达文件末尾时,它会停止,具体视情况而定。

二、fgets

1、fgets函数头文件

#include 

2、fgets函数声明

char *fgets(char *str, int n, FILE *stream);

3、fgets函数形参、返回值

str:这是指向一个字符数组的指针,该数组存储了要读取的字符串。
n:这是要读取的最大字符数(包括最后的空字符)。通常是使用以 str 传递的数组长度。
stream:这是指向 FILE 对象的指针,该 FILE 对象标识了要从中读取字符的流。
返回值:如果成功,该函数返回相同的 str 参数。如果到达文件末尾或者没有读取到任何字符,str 的内容保持不变,并返回一个空指针。如果发生错误,返回一个空指针。
在读字符时遇到end-of-file,则eof指示器被设置,如果还没读入任何字符就遇到这种情况,则stream保持原来的内容,返回NULL;如果发生读入错误,error指示器被设置,返回NULL,stream的值可能被改变。

4、使用示例

#include 
int main(int argc, char *argv[])
{
    FILE *fp = NULL;
	char buf[64] = {0};
	fp = fopen("./test.txt", "r");
	if (fp != NULL)
	{
		while (fgets(buf, sizeof(buf), fp))
		{
            printf("buf=%s\n", buf);
		}
		fclose(fp);
	}
    return 0;

上述代码段会读取test.txt文件,通过fgets函数读取每一行字符串。

5、fgets函数实现

char *fgets(char *s, int n,  FILE *stream)
{
   register int c;
   register char *cs;
   cs = s;

   while(--n > 0 && (c = getc(stream)) != EOF)
   {
      if((*cs++ =   c) == '\n')
      {
         break;
      }
   }

   *cs = '\0';
   return (c == EOF && cs == s) ? NULL : s ;
}

从源码中可以看出,每次调用fgets函数,形参一会被赋予读取到的字符,并在最后赋值于’\0’。

三、总结

记得配合sscanf函数使用效果更棒。

你可能感兴趣的:(C/C++,c++,c语言,开发语言)