【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月前
|
存储 测试技术 编译器
文件操作【fopen/fclose/fputs/fgets】【C语言/进阶】
文件操作【fopen/fclose/fputs/fgets】【C语言/进阶】
67 0
|
4天前
|
C语言 Windows
C语言中的fopen与fclose函数详解
C语言中的fopen与fclose函数详解
11 1
|
20天前
|
安全 C语言 C++
【C语言】超详解strncpy&&strncat&&strncmp&&strerror&&perror的使⽤和模拟实现
【C语言】超详解strncpy&&strncat&&strncmp&&strerror&&perror的使⽤和模拟实现
|
6月前
|
存储 C语言 数据安全/隐私保护
c语言文件操作详解:fgetc,fputc,fgets,fputs,fscanf,,fprintf,fread,fwrite的使用和区别
c语言文件操作详解:fgetc,fputc,fgets,fputs,fscanf,,fprintf,fread,fwrite的使用和区别
102 0
|
7月前
|
编译器 Linux C语言
【C语言】字符串函数的介绍二( strcmp、strncpy、strncat、strncmp)
【C语言】字符串函数的介绍二( strcmp、strncpy、strncat、strncmp)
36 0
|
9月前
|
C语言
strstr函数strtok函数strerror函数详解【C语言】
strstr函数strtok函数strerror函数详解【C语言】
|
11月前
C库函数 ——strstr、strtok的详解
C库函数 ——strstr、strtok的详解
88 0
|
安全 编译器
【C库函数】strncpy函数详解
【C库函数】strncpy函数详解
【C库函数】strncpy函数详解