[問題] gcc不准我用gets(char *s);

看板LinuxDev作者 (人生遊戲 戲遊人生)時間16年前 (2009/12/20 16:25), 編輯推噓3(307)
留言10則, 6人參與, 最新討論串1/1
餓死抬頭 我寫了一個很簡單的程式 想說練習用用看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)

12/20 16:27, , 1F
那只是warning 你的執行檔應該還是有生出來
12/20 16:27, 1F

12/20 16:28, , 2F
危險是因為不能指定長度 容易buffer overflow
12/20 16:28, 2F

12/20 16:29, , 3F
真的耶@@ 抱歉 是我笨了XD
12/20 16:29, 3F

12/20 16:29, , 4F
謝謝喔^^
12/20 16:29, 4F

12/20 17:26, , 5F
用fgets吧
12/20 17:26, 5F

12/22 23:11, , 6F
gets危險是因為你的buffer就那麼大,但若你輸入大於buffer
12/22 23:11, 6F

12/22 23:12, , 7F
會蓋掉其他記憶體裡原有資料,以前很多病毒就是利用此原理
12/22 23:12, 7F

12/23 01:34, , 8F
樓上說的是緩衝區溢位攻擊嗎?
12/23 01:34, 8F

12/24 00:45, , 9F
對啊 其實現在大部份的漏很多也都還是buffer overflow
12/24 00:45, 9F

12/26 11:03, , 10F
所以後來一堆 function 都多出了 n 版本,如 strncpy
12/26 11:03, 10F
文章代碼(AID): #1BBTztBK (LinuxDev)
文章代碼(AID): #1BBTztBK (LinuxDev)