fgets與gets的區別

2021-07-24 14:47:28 字數 826 閱讀 2500

1.fgets函式

功能:用於從檔案中讀取一字串

函式原型

char *fgets(char *buf, int bufsize, file *stream);
引數

*buf: 字元型指標,指向用來儲存所得資料的位址。

bufsize: 整型資料,指明儲存資料的大小。

*stream: 檔案結構體指標,將要讀取的檔案流。

返回值:

操作成功,返回的是msg的值,假如碰到檔案結束或錯誤時,fgets返回null;由於輸入過程中一般只會按下回車,很少是eof,所以不會碰到檔案結束;當輸入長度超過長度n時,fgets會自動截斷,屬於操作成功

2.gets函式(字元指標)

功能從stdin流中讀取字串,直至接受到換行符或eof時停止,並將讀取的結果存放在buffer指標所指向的字元陣列中。換行符不作為讀取串的內容,讀取的換行符被轉換為null值,並由此來結束字串。

原型:char*gets(char*buffer);

返回值讀入成功,返回與引數buffer相同的指標;讀入過程中遇到eof(end-of-file)或發生錯誤,返回null指標。所以在遇到返回值為null的情況,要用ferror或feof函式檢查是發生錯誤還是遇到eof。

注意本函式可以無限讀取,不會判斷上限,所以程式設計師應該確保buffer的空間足夠大,以便在執行讀操作時不發生溢位。如果溢位,多出來的字元將被寫入到堆疊中,這就覆蓋了堆疊原先的內容,破壞乙個或多個不相關變數的值。這個事實導致gets函式只適用於玩具程式。

fgets與gets的區別

首先看看他們各自的定義 gets 從stdin流中讀取字串,直至接受到換行符或eof時停止,並將讀取的結果存放在buffer指標所指向的字元陣列中。換行符不作為讀取串的內容,讀取的換行符被轉換為 0 空字元,並由此來結束字串。fgets 讀取的資料儲存在buf指向的字元陣列中,每次最多讀取bufsi...

fgets和gets的區別

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

fgets()和gets()的區別

區別如下 1 fgets 函式的第2個引數指明了讀入字元的最大數量。如果該引數的值是n,那麼fgets 將讀入n 1個字元,或者讀到遇到的第乙個換行符為止 2 如果fgets 讀到第乙個換行符,會把它儲存在字串中。這點和gets 不同,gets 會丟棄換行符 3 fgets 函式的第3個引數指明要讀...