今天在C代码中使用gets()时提示“warning: this program uses gets(), which is unsafe.”,然后这个程序还能运行,无聊的我开始查阅资料,为啥gets()会unsafe呢。
通过Google查阅前辈的问答,原来是这么回事。
gets()这个函数只有一个参数,那就是字符缓冲区的指针,并没有指定该缓冲区的长度也就是大小。当你输入一个很长很长的字符串的时候,gets ()函数会把每一个字符都存入到栈(statck)中,因此当字符串很大的时候就会导致程序异常终止。前辈们给的建议是使用fgets()函数替代gets()。
例子:
//使用gets() char buffer[4096]; gets(buffer); //使用fgets()替换gets() char buffer[4096]; fgets(buffer, (sizeof buffer / sizeof buffer[0]), stdin);
参考网址:
时间: 2024-09-30 09:17:49