gets,fgets,scanf与字符串的故事

本文介绍了C语言中替代gets函数的fgets和scanf函数。详细讲解了fgets的函数原型和工作原理,以及如何使用scanf输入字符串,包括扫描集的概念和使用示例,展示了如何处理带有空格的字符串输入。
摘要由CSDN通过智能技术生成

1.gets

gets是从标准输入设备读取字符串的函数,函数原型 char * gets ( char * str );  刚开始学习C语言时觉得gets这个函数相当的好用,因为他比scanf写起来要短,而且可以输入有空格的字符串。但是越往后学就会发现,在C语言中用GCC编译使用了gets函数的源文件,编译器会给警告。

warning: implicit declaration of function ‘gets’; did you mean ‘fgets’? [-Wimplicit-function-declaration]

警告: the `gets' function is dangerous and should not be used.

 

原因是gets可以无限读取,不会判断上限,如果无限输入会造成栈空间溢出,在程序返回时,不能正常的找到返回地址,程序将发生不可预测行为。如果用了gets,像我们现在写的小程序可能在PC端上会闪退,但如果在大型项目中就会造成很严重的损失。因此我们应该尽量避免使用gets函数,顺便一提在2011年12月,ANSI 采纳了 ISO/IEC 9899:2011 标准,标准中删除了 gets()函数,使用一个新的更安全的函数gets_s()替代。

如果不用gets想要输入字符串,就要用到fgets和scanf了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值