C语言的字符串输入函数gets_s()
来源:互联网 发布:360人工智能研究院招聘 编辑:程序博客网 时间:2024/05/29 07:51
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语言的字符串输入函数gets_s()
- C语言gets_s, _getws_s函数了解
- C语言的字符串输入gets()函数
- C语言的字符串输入fgets()函数
- C语言笔记——gets_s, fgets, puts函数
- gets_s不能输入的问题
- C语言字符串输入函数的比较与解析
- C语言字符串输入,gets函数的缺点以及解决方法
- C语言字符串输入与输出函数
- gets()gets_s()puts()函数的使用
- C语言 字符串输入
- C语言中scanf函数和gets函数在输入字符串时的区别
- C语言 - 字符串的输入、输出
- C语言输入带空格的字符串
- C语言中字符串的输入问题
- C语言输入带空格的字符串
- c语言 这里gets_s读取字符,输入A,能输出a[0]为A,而输入AB时,a[0]没有任何输出,什么原因?
- c语言在输入字符串时输入空格的方式
- WebRTC Experiments & Demos
- hive表信息查询:查看表结构、表操作等(转)
- Spark Streaming 入门教程
- emlog修改后台模板
- 欢迎使用CSDN-markdown编辑器
- C语言的字符串输入函数gets_s()
- Ajax传递的数据包含特殊字符时的解决方法
- 启动Tomcat时,报错;Address already in use: JVM_Bind<null>:8080
- Hadoop学习-hive的安装配置与常见问题解决
- 搭建分布式Hadoop环境
- 使用filter导致服务器返回的页面始终是空白---在doFilter中漏写了chain.doFilter()
- 【步兵 cocos2dx】热更新(下)
- MyFlag Step12:menupath界面跳转测试以及其他优化
- python3运行py的文件时会出现missing parentheses is call to 'print'