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()替代。