C/C++ fgets函数详解

fgets函数用于从指定的文件流中读取一行内容,存储到字符串数组中。它在stdio.h头文件中声明,接受一个字符数组指针、最大读取字符数和FILE指针作为参数。当读取到换行符、文件末尾或达到最大字符数时停止。示例代码展示了如何读取文本文件的每一行。源码实现部分解释了fgets如何工作,将读取的字符添加到数组直到遇到 或EOF。
摘要由CSDN通过智能技术生成


一、fgets函数简介

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

二、fgets

1、fgets函数头文件

#include <stdio.h>

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 <stdio.h>
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函数使用效果更棒。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

烫手的热山药

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值