作者amu1661024 (人生游戏 戏游人生)
看板LinuxDev
标题[问题] gcc不准我用gets(char *s);
时间Sun Dec 20 16:25:25 2009
饿死抬头 我写了一个很简单的程式
想说练习用用看gets (平常都一直用scanf)
程式码如下:
#include <stdio.h>
int main()
{
char input[100];
printf("Input: ");
gets(input);
printf("The input string is: %s\n",input);
return 0;
}
够简单了吧XD
然後编译时出现以下讯息:
$ gcc -o print.o print.c
/tmp/cc2rK0aj.o: In function `main':
print.c:(.text+0x2a): warning: the `gets' function is dangerous and
should not be used.
这...还有这样禁止人使用的喔= =
假如我坚持要用gets那要怎麽样才能用呢?
小弟不才 感谢大大回答
补问一下: gets哪里危险了?
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 123.240.190.163
※ 编辑: amu1661024 来自: 123.240.190.163 (12/20 16:27)
1F:→ james732:那只是warning 你的执行档应该还是有生出来 12/20 16:27
2F:→ james732:危险是因为不能指定长度 容易buffer overflow 12/20 16:28
3F:→ amu1661024:真的耶@@ 抱歉 是我笨了XD 12/20 16:29
4F:→ amu1661024:谢谢喔^^ 12/20 16:29
5F:推 carlcarl:用fgets吧 12/20 17:26
6F:推 non50:gets危险是因为你的buffer就那麽大,但若你输入大於buffer 12/22 23:11
7F:→ non50:会盖掉其他记忆体里原有资料,以前很多病毒就是利用此原理 12/22 23:12
8F:→ amu1661024:楼上说的是缓冲区溢位攻击吗? 12/23 01:34
9F:推 aitjcize:对啊 其实现在大部份的漏很多也都还是buffer overflow 12/24 00:45
10F:→ tinlans:所以後来一堆 function 都多出了 n 版本,如 strncpy 12/26 11:03