fgets
是一个可以从标准流中获取字符串的函数
函数基本原型
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’。
当我们输入小于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’的身影
这一点也是我们需要注意的
这里我放一道题的链接,希望大家可以尝试去使用fgets()函数
题目入口: 计算某字符出现次数