问下为什么我把gets和scanf混合在一起用不行,但在之间加个fflush(stdin);的话就OK了呢?
by jizhang1976 - C/C++ - 2009-11-25 10:40:31 阅读(1555) 回复(3)
Linux下,C程序里使用了gets(),编译的时候出现: the `gets' function is dangerous and should not be used. 请问这是怎么回事呢?如何解决?谢谢!
我写的c程序在gcc编译时提示 gets危险, 我想问问大家怎么得到终端的字符串输入的. 我换了如下的做法代替gets, 不知道好不好 char buf[128]; fgets (buf, 128, stdin); buf [strlen(buf)] = '\0';
我写的c程序在gcc编译时提示 gets危险, 我想问问大家怎么得到终端的字符串输入的. 我换了如下的做法代替gets, 不知道好不好 char buf[128]; fgets (buf, 128, stdin); buf [strlen(buf)] = '\0';
By Marco Giuliani
gets函数的危险性 gets函数和fgets函数最大的不同是gets函数的缓冲区虽然由用户提供,但是用户无法指定其一次最多读入多少字节的内容。这一点导致gets变成了一个非常危险的函数。 下例演示了gets函数的危险性。该程序定义了一个缓冲区,但是使用gets函数接收用户输入的字符串时却会出现问题。 (1)在vi编辑器中编辑该程序如下: 程序清单21-5 risk.c 利用gets函数的漏洞进行缓冲区攻击 #include stdio.h>int main(void) { /* 这个...
#include
fgets:读入一串字符。当遇到以下情况之一时将停止读入而返回; 读入的字符数已经到达n-1个(因为该函数要求指定允许读入的最大字符数,并且为读入的字符串添加‘\0’因此读入的字符最多是n-1) 遇到一个换行符 它是一个理想的每次读一行的函数。 gets:从标准输入设备中读入一串字符,直到遇到换行符为止。它是一个不推荐使用的函数。由于调用者没有指定缓存的长度,可能会造成缓存越界,从而有安全隐患。另外,它也不会将换行符存...
我再linux用gcc编译c程序的时候,用gets函数的话,就老是给我下面的警告信息: /tmp/ccyhTLKy.o(.text+0x53): In function `main': : the `gets' function is dangerous and should not be used. 这是怎么会事啊? 不用gets,用scanf的话,读字符串,到空格就结束了.怎么改呢?
代码如下:
#include