今天做PAT的时候用了gets结果编译错误,查了查才知道原来PAT禁用gets函数,原因也很简单,gets不安全:gets函数不判断输入是否溢出。因为该函数可以无限读取,所以应该确保buffer的空间足够大,以便在执行读操作时不发生溢出。如果溢出,多出来的字符将被写入到堆栈中,这就覆盖了堆栈原先的内容,破坏一个或多个不相关变量的值。这个事实导致gets函数只适用于玩具程序。
那么在做PAT的时候就必须要找到几种gets函数的替代才行。下面介绍了两种替代gets的方法,代码也都非常简单明了。
一、用%c循环输入直到遇到换行或结束
#include<cstdio>
#include<cstring>
using namespace std;
int main()