C语言的字符串输入函数gets_s()
2017-06-11 23:56
211 查看
C语言的字符串输入函数gets_s()
C11新增了gets_s()函数(可选),和fgets()函数类似(上一篇博客有介绍《 C语言的字符串输入fgets()函数 》),用一个参数限制读入的字符数。gets_s()函数的形式如下:
gets_s(words,STLEN);
gets_s()与fgets()的区别如下:
gets_s()只从标准输入(通常是键盘)中读取数据,所以不需要第3个参数。
如果gets_s()读到换行符,会丢弃它而不是存储它。
如果gets_s()读到最大字符数都没有读到换行符,会执行以下几步。首先把目标数组中的首字符设置为空字符,读取并丢弃随后的输入直到读到换行符或文件结尾,然后返回空指针。接着,调用依赖实现的处理函数(或者你选择的其他函数),可能会中止或退出程序。
第二个特性说明,只要输入行未超过最大字符数,gets_s()与gets()几乎一样,完全可以用gets_s()替代gets()。第3个特性,则需要我们进一步学习才能运用好。
如果目标存储区装得下输入行,gets(),fgets()和gets_s()3个函数都内问题。但是fgets()会保留输入末尾的换行符作为字符串的一部分,要编写额外的代码将其替换成空字符。
如果输入行太长,使用gets()不安全,它会擦写现有数据,存在安全隐患。gets_s()函数很安全,但是,如果不希望程序中止或退出,就要知道如何编写特殊的“处理函数”。另外,如果让程序继续运行,gets_s()会丢弃该输入行的其余字符,无论你是否需要。由此可见,当输入太长,超过数组容纳的字符时,fgets()最容易使用,而且可以选择不同的处理方式。如果要让程序继续使用输入行超出的字符串,可以参考上一篇博客–《 C语言的字符串输入fgets()函数 》的第2个例子。如果想丢弃输入行超出的字符串,可以参考上一篇博客的第一个例子。
可见,当输入与预期不符时,gets_s()函数没有fgets()函数方便、灵活。或许这也是gets_s()只作为C库的可选拓展之一。因此,fgets()通常是处理类似情况的最佳选择。
参考资料:
[1] 史蒂芬・普拉达. C Primer Plus (第6版) 中文版[M]. 人民邮电出版社, 2016.
相关文章推荐
- 【C语言天天练(十五)】字符串输入函数fgets、gets和scanf
- 【C语言天天练(十五)】字符串输入函数fgets、gets和scanf
- 【C语言天天练(十八)】字符/字符串输入函数fgetc、fgets、getc、getchar和gets
- C语言中scanf函数和gets函数在输入字符串时的区别
- C语言的字符串输入gets()函数
- C Primer Plus学习 二十三 字符串输入 gets ()函数
- gets与scanf_C语言中两种字符串输入方法比较
- 字符串输入函数gets( ) fgets( ) scanf( )
- 字符串输入gets和fgets函数的区别
- Poedu_C语言_lesson24_20161006_字符串处理函数_fgets与gets
- C语言学习笔记之字符串I/O(gets()函数和puts()函数)
- Linux C 字符串输入函数 gets()、fgets()、scanf() 详解
- C语言中scanf()与gets()在输入字符串的差别
- C语言gets()函数:从流中读取字符串
- 深入解析scanf()/getchar()和gets()等函数针对字符串输入的问题
- 深入解析scanf()/getchar()和gets()等函数针对字符串输入的问题
- 字符串处理函数gets()、puts()、strcmp()、strlen()、strcpy()、strcat()-C语言
- 字符串处理函数gets()、puts()、strcmp()、strlen()、strcpy()、strcat()-C语言
- C语言字符串输入与输出函数
- 字符串输入gets()、fgets()和字符串输出puts()、fputs()函数