fgets 和gets 函式的區別

2021-06-21 23:43:28 字數 987 閱讀 7891

在程式設計中發現gets和fgets一些區別總結一下:

1、fgets比gets安全!

為了安全,gets少用,因為其沒有指定輸入字元的大小,限制輸入緩衝區得大小,如果輸入的字元大於定義的陣列長度,會發生記憶體越界,堆疊溢位。後果非常嚴重!

fgets會指定大小,如果超出陣列大小,會自動根據定義陣列的長度截斷。

2、用strlen檢測兩者的輸入的字串長度,結果不一樣

同樣是輸入123

gets只有一次換行,這是因為程式的語句printf(「%s\n」,str)

fgets有兩次,而第二次是其本身把回車換行符存入了字串裡

所以,gets的長度只有3和輸入的字串長度一樣,fgets是4,多出來的是回車換行符。

具體的介紹:

fgets函式fgets函式用來從檔案中讀入字串。

fgets函式的呼叫形式如下:fgets(str,n,fp);此處,fp是檔案指標;str是存放在字串的起始位址;n是乙個int型別變數。

函式的功能是從fp所指檔案中讀入n-1個字元放入str為起始位址的空間內;如果在未讀滿n-1個字元之時,已讀到乙個換行符或乙個eof(檔案結束標誌),則結束本次讀操作,讀入的字串中最後包含讀到的換行符。

因此,確切地說,呼叫fgets函式時,最多只能讀入n-1個字元。讀入結束後,系統將自動在最後加'\0',並以str作為函式值返回。

gets()將刪除新行符, fgets()則保留新行符。

要去掉fgets()最後帶的「\0",只要用 s[strlen(s)-1]='\0';即可。

fgets不會像gets那樣自動地去掉結尾的\n,所以程式中手動將\n位置處的值變為\0,代表輸入的結束。

fgets 和gets 函式的區別

在程式設計中發現gets和fgets一些區別總結一下 1 fgets比gets安全!為了安全,gets少用,因為其沒有指定輸入字元的大小,限制輸入緩衝區得大小,如果輸入的字元大於定義的陣列長度,會發生記憶體越界,堆疊溢位。後果非常嚴重!fgets會指定大小,如果超出陣列大小,會自動根據定義陣列的長度...

gets和fgets函式的區別

gets函式原型 char gets char buffer 讀取字元到陣列 gets str str為陣列名。gets函式功能 從鍵盤上輸入字元,直至接受到換行符或eof時停止,並將讀取的結果存放在buffer指標所指向的字元陣列中。讀取的換行符被轉換為null值,做為字元陣列的最後乙個字元,來結...

fgets和gets函式的區別

gets函式原型 char gets char buffer 讀取字元到陣列 gets str str為陣列名。gets函式功能 從鍵盤上輸入字元,直至接受到換行符或eof時停止,並將讀取的結果存放在buffer指標所指向的字元陣列中。讀取的換行符被轉換為null值,做為字元陣列的最後乙個字元,來結...