今天在C代碼中使用gets()時提示“warning: this program uses gets(), which is unsafe.”,然后這個程序還能運行,無聊的我開始查閱資料,為啥gets()會unsafe呢。
通過Google查閱前輩的問答,原來是這么回事。
gets()這個函數只有一個參數,那就是字符緩沖區的指針,並沒有指定該緩沖區的長度也就是大小。當你輸入一個很長很長的字符串的時候,gets ()函數會把每一個字符都存入到棧(statck)中,因此當字符串很大的時候就會導致程序異常終止。前輩們給的建議是使用fgets()函數替代gets()。
例子:
//使用gets() char buffer[4096]; gets(buffer); //使用fgets()替換gets() char buffer[4096]; fgets(buffer, (sizeof buffer / sizeof buffer[0]), stdin);
參考網址: