看板 LinuxDev 關於我們 聯絡資訊
餓死抬頭 我寫了一個很簡單的程式 想說練習用用看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)
james732:那只是warning 你的執行檔應該還是有生出來 12/20 16:27
james732:危險是因為不能指定長度 容易buffer overflow 12/20 16:28
amu1661024:真的耶@@ 抱歉 是我笨了XD 12/20 16:29
amu1661024:謝謝喔^^ 12/20 16:29
carlcarl:用fgets吧 12/20 17:26
non50:gets危險是因為你的buffer就那麼大,但若你輸入大於buffer 12/22 23:11
non50:會蓋掉其他記憶體裡原有資料,以前很多病毒就是利用此原理 12/22 23:12
amu1661024:樓上說的是緩衝區溢位攻擊嗎? 12/23 01:34
aitjcize:對啊 其實現在大部份的漏很多也都還是buffer overflow 12/24 00:45
tinlans:所以後來一堆 function 都多出了 n 版本,如 strncpy 12/26 11:03