作者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