一起talk C栗子吧(第一百七十 六回:C语言实例--字符及字符串输入函数一)
各位看官们,大家好,上一回中咱们说的是获取当前终端行数和列数的例子,这一回咱们说的例子是:字符和字符串输入函数。闲话休提,言归正转。让我们一起talk c栗子吧!
看官们,在我们实际的工作中,经常使用字符和字符串。这一回中,我们将介绍如何使用标准库中的函数来输入字符和字符串。
常用的字符和字符串输入函数有五个,下面是它们的函数原型,请大家参考:
int fgetc(file *stream); int getc(file *stream); int getchar(void); char *gets(char *s); char *fgets(char *s, int size, file *stream);
接下来我们分别介绍这些函数的用法:
1.函数fgetc
int fgetc(file *stream);该函数用来从流中获取字符; 该函数只有一个文件指针类型的参数,它指向一个流; 该函数运行成功时返回从流中获取到的字符,运行失败或者到达流的尾部时返回eof;
关于该函数的使用,我再做一些补充说明:
该函数用来从其参数所指的流(即stream)中获取一个字符,并且返回获取到的字符,只不过返回的不是字符本身,而是字符转换为int类型后的数值。获取完字符后,该函数会把流内部的位置向前移动一位,以方便再次从流中获取字符。
2.函数getc
int getc(file *stream);
该函数和fgetc函数用法完全相同,只是比fgetc函数健壮一些,可以看作是fgetc函数的替代版本。现在流行各种plus,因此,我们给该函数起个新名字:
fgetc plus,哈哈。
3.函数getchar
3.函数getchar
int getchar(void);
该函数用来从标准输入中获取字符; 该函数没有参数,如果把getc函数的参数设定为stdin,那么它们两个的的用法完全相同;
4.函数gets
4.函数gets
char *gets(char *s);
该函数用来从标准输入中获取字符串; 该函数只有一个字符指针类型的参数,指针所指的区域用来存放从标准输入流中获取到的字符串; 该函数运行成功时返回获取到的字符串,运行失败或者到达流的尾部时返回空指针;
关于该函数的使用,我再做一些补充说明:
该函数获取字符串时遇到换行符或者到达流的末尾时就停止获取,获取完字符串后,该函数会把流内部的位置向前移动一位,以方便再次从流中获取字符串。
如果流中字符串的长度比参数s指向的区域大,那么会造成缓冲区溢出;如果流中字符串的长度比参数s指向的区域小,那么会获取流中的全部字符,并且在字符串末尾添加小尾巴。
此外,该函数引起的缓冲区溢出可谓是臭名昭著,当我们使用gcc编译包含gets的程序时,gcc会发出以下警告:
warning: the `gets' function is dangerous and should not be used.
5.函数fgets
5.函数fgets
char *fgets(char *s, int size, file *stream);
该函数用来从流中获取字符串; 该函数的第一个参数是字符类型的指针,该指针指向的区域用来存放从流中获取到的字符串; 该函数的第二个参数表示每次从流中获取字符串所包含的字符数量,也就是字符串的长度减去一; 该函数的第三个参数是一个文件指针类型的参数,它指向一个流; 该函数运行成功时返回获取到的字符串,运行失败或者到达流的尾部时返回空指针;
关于该函数的使用,我再做一些补充说明:
该函数用来从其参数所指的流(即stream)中获取字符串,并且返回获取到的字符串。获取字符串时遇到换行符或者满足参数设定的字符个数时就停止获取,获取完字符串后,该函数会把流内部的位置向前移动一位,以方便再次从流中获取字符串。
如果流中字符串的长度比第二个参数size的值大,那么只获取size-1个字符到字符串中,剩下的一个字符用来存放空字符,也就是字符串的小尾巴。如果流中字符串的长度比第二个参数size的值小,那么会获取流中的全部字符,并且在字符串末尾添加小尾巴。
该函数可以控制获取字符串的长度,因此可以避免发生缓冲区溢出。可以把该函数看作是gets函数的替代版。
最后我们对这五个字符和字符串输入函数做整体的说明:
1.它们都使用了缓冲技术,也就是说只有按下回车键,才会执行命令(我们在前面章回中介绍过缓冲技术); 2.字符输入函数fgetc,getc和getchar会把回车键读取到缓冲区中,下次再读取字符时读取到的是回车键; 3.字符串输入函数fgets会把回车键读取到字符串中,而gets则不会;
各位看官,关于字符和字符串输入函数的例子咱们就说到这里。欲知后面还有什么例子,且听下回分解 。
上一篇: Qt使用QWT绘制柱状图详解
下一篇: React中代码分割的4种实现方式
推荐阅读
-
一起talk C栗子吧(第六十回:C语言实例--字符串复制)
-
一起talk C栗子吧(第七十回:C语言实例--字符串初始化函数)
-
一起talk C栗子吧(第一百六十六回:C语言实例--大小写字符转换)
-
一起talk C栗子吧(第一百七十七回:C语言实例--字符及字符串输入函数二)
-
一起talk C栗子吧(第一百七十 六回:C语言实例--字符及字符串输入函数一)
-
一起talk C栗子吧(第六十回:C语言实例--字符串复制)
-
一起talk C栗子吧(第一百六十六回:C语言实例--大小写字符转换)
-
一起talk C栗子吧(第七十回:C语言实例--字符串初始化函数)
-
一起talk C栗子吧(第一百七十七回:C语言实例--字符及字符串输入函数二)
-
一起talk C栗子吧(第一百七十 六回:C语言实例--字符及字符串输入函数一)