fgets和gets的區別

2022-06-02 10:51:02 字數 1061 閱讀 8970

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

1、 fgets比gets安全,使用gets編譯時會警告

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

fgets會指定大小,如果超出陣列大小,會自動根據定義陣列的長度截斷。(redhat9.0實驗並不是如此,不知為何,照樣能輸出)

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

gets:

fgets:

可以看到,同樣是輸入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,還要再說兩句,下面這種用法,是安全的判斷檔案讀取結束或者出錯的好方式,切忌不能使用while(!feof(fp)) ,還有對於fgets的第二個引數是最大能讀取檔案字元的個數,一般最大的長度是節。

while(fgets(..., stream))

if(ferror(stream))

報告和請示的區別

一 請示的原則 需要請示的情況大體包括 1 對上級的方針政策有不了解的問題 2 工作中新近發生比較重大的 本單位一時沒有把握處理的問題 3 本地區 本部門因情況特殊難執行統一規定,需要變通處理的問題 4 開展某項工作遇到的人力 物力 財力方面難以解決的問題等。這裡有兩點需要特別注意,第一,要避免事前...

做和作的區別

作 與 做 的區別 李濤 現代漢語中的 作 與 做 用途很廣,使用頻度很高,所構成的詞語很多,二者之間的意義和用法也相當複雜,既有區別又有交叉。筆者為高中語文教師,在教學中,發現總有一些學生對 做 作 的用法搞不清,有些乾脆糊里糊塗使用。看了人民教育出版社譚桂聲同志的關於 做 作 的辨析考證,深有啟...

做和作的區別

作 與 做 人民教育出版社譚桂聲 現代漢語中的 作 與 做 用途很廣,使用頻度很高,所構成的詞語很多,二者之間的意義和用法也相當複雜,既有區別又有交叉。一 作 做 溯源 甲骨文中有 乍 而無 作 乍 是 作 的古文。在甲骨文中作為動詞,意義同 作 例如 甲骨卜辭 我乍邑 意為 我建築城邑 金文銘辭也...