【C库函数】fgets详解

简介: 是一个可以从标准流中获取字符串的函数

fgets

是一个可以从标准流中获取字符串的函数

feb9086ebad6886314c5e64f31f9d58c_watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5aiB5aiB5rKB5rKB,size_20,color_FFFFFF,t_70,g_se,x_16.png

函数基本原型

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


参数讲解

参数 string n stream
解释 存储字符串的位置 存储字符串的最大个数(n-1)  指向读取的流

stream在使用中一般会写为stdin,意为标准输入流(standard input )


返回值

成功返回字符串,错误或文件结束条件返回NULL。


使用 feof 或 ferror 来确定是否发生错误。


函数详解

        fgets()函数并不是一直在标准输入流中一直读取字符的,当遇到‘\0’或是读取字符等于n-1,就会停止。


       那什么fgets()函数在标准输入流中最多读取n-1个字符,而为什么不是n个字符呢?


       我的理解是每次fgets读取字符时都会在最后添加一个空字符(‘\0’)以构成一个字符串。


我们看下面的代码

#include<stdio.h>
int main()
{
  char str[10];//定义一个字符型数组
  fgets(str, 5, stdin);//从stdin中最多读取(5-1)个字符并返回给str
  return 0;
}

当我输入7个字符‘abcdefg’时,str数组中存放则是 5个字符,分别为‘a’ ‘b’ ‘c’ ‘d’ ‘\0’。  

2ce7308b5c4ed16585bf26122824f7ab_watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5aiB5aiB5rKB5rKB,size_20,color_FFFFFF,t_70,g_se,x_16.png

当我们输入小于n-1个字符时也就是说fgets()在达到字符最大数目之前读完一行,这是它会把‘\n’也当做字符串一部分存起来,并在最后添加一个‘\0’。这也是fgets()函数与gets()函数最根本的区别


废话不多说,直接上代码演示

#include<stdio.h>
int main()
{
  char str[10];
  fgets(str, 5, stdin);
  return 0;
}

当我输入两个字符‘a’ ‘s’时,str中就会出现‘\n’的身影

c220120f7e0b65560a72a3cfd3412c92_watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5aiB5aiB5rKB5rKB,size_20,color_FFFFFF,t_70,g_se,x_16.png

这一点也是我们需要注意的


这里我放一道题的链接,希望大家可以尝试去使用fgets()函数


题目入口: 计算某字符出现次数


相关文章
|
6月前
|
存储 编译器 程序员
C语言:文件操作详解
C语言:文件操作详解
|
6月前
|
C语言
C语言文件操作
C语言文件操作
37 0
C语言文件操作
|
14天前
|
存储 C语言
【c语言】玩转文件操作
本文介绍了C语言中文件操作的基础知识,包括文件的打开和关闭、文件的顺序读写、文件的随机读写以及文件读取结束的判定。详细讲解了`fopen`、`fclose`、`fseek`、`ftell`、`rewind`等函数的使用方法,并通过示例代码展示了如何进行文件的读写操作。最后,还介绍了如何判断文件读取结束的原因,帮助读者更好地理解和应用文件操作技术。
23 2
|
6月前
|
API 文件存储 C语言
C语言文件操作详解(上)(一)
这段内容主要介绍了C语言中文件操作的基本概念和常用函数。
56 2
|
6月前
|
存储 程序员 C语言
C语言:文件操作
C语言:文件操作
44 1
|
6月前
|
存储 编译器 C语言
c语言文件操作
c语言文件操作
|
6月前
|
存储 程序员 C语言
C语言-文件操作
C语言-文件操作
65 0
|
6月前
|
存储 程序员 C语言
C语言之文件操作篇(2)
C语言之文件操作篇(2)
74 0
|
11月前
|
存储 C语言 C++
C语言文件操作详解(下)
C语言文件操作详解
|
存储 C语言 算法
【C语言】文件操作(二)
【C语言】文件操作(二)
【C语言】文件操作(二)