c語言裡為什麼fgets很少用,C語言裡為什麼fgets很少用?

時間 2021-08-30 10:38:27

1樓:匿名使用者

因為fgets函式只能輸入字串,而scanf()能輸入多種型別的資料,加上一般的c語言教材往往重視講授原理,而對程式健壯性、異常處理等考慮不多,所以一般資料很少提及fgets函式。

scanf在獲取使用者輸入的字串時,遇到空格、製表符即終止,並在結尾自動加上」\0″。gets在獲取使用者輸入字串時,遇到空格、製表符不會終止,在結尾也會自動加上「\0」。

由於scanf和gets這兩個函式不對輸入的長度進行核查,即使使用者輸入超過了規定的buffer容量,函式也會接受輸入,造成緩衝區溢位,程式崩潰。所以建議實際使用時最好用fgets函式來替代。

附上fgets函式的有關說明:

fgets函式原型:char *fgets(char *buf, int bufsize, file *stream);

引數:1. *buf: 字元型指標,指向用來儲存所得資料的地址。

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

即每次最多讀取bufsize-1個字元(第bufsize個字元賦'\0'),如果檔案中的該行,不足bufsize個字元,則讀完該行就結束。如若該行(包括最後一個換行符)的字元數超過bufsize-1,則fgets只返回一個不完整的行,但是,緩衝區總是以null字元結尾,對fgets的下一次呼叫會繼續讀該行。

3. *stream: 檔案結構體指標,將要讀取的檔案流。如為stdin,則從鍵盤讀取。

返回值:

成功,則返回第一個引數buf;

在讀字元時遇到end-of-file,則eof被設定,如果還沒讀入任何字元就遇到這種情況,則buf保持原來的內容,返回null;如果發生讀入錯誤,error被設定,返回null,buf的值可能被改變。因此我們不能直接通過fgets的返回值來判斷函式是否是出錯而終止的,應該藉助feof函式或者ferror函式來判斷。

2樓:

我也是聽你說了才知道fgets可以用於標準輸入的,試了一下確實可以,而且也可以防止溢位,確實是個好東西.

至於為什麼書上不怎麼講,一方面這個用法不屬於"常規"的用法,是一種特殊用法,另一方面大部分c教材都是死板板的一個樣,這些靈活的東西從來就不會出現在這些教材上的

反正這只是我的理解,至於或許有什麼缺點,我沒查到相應的資料

3樓:匿名使用者

因為它只能輸入字串,

而scanf()能輸入多種型別的資料,

所以書上對scanf()講得很多,

對fgets()講得很少.

4樓:

因為scanf()的%s格式,就是為了解決 fgets() 不能判斷空格的問題,而且scanf()的功能比fgets()要強大

5樓:匿名使用者

scanf()函式是c中相對其他輸入函式來說功能比較強大的函式,所以相對來說介紹得多點.

c語言裡fgets函式怎麼用?

6樓:匿名使用者

fgets(由檔案中讀取一字串)

表標頭檔案

include

定義函式

char * fgets(char * s,int size,file * stream);

函式說明

fgets()用來從引數stream所指的檔案內讀入字元並存到引數s所指的記憶體空間,直到出現換行字元、讀到檔案尾或是已讀了size-1個字元為止,最後會加上null作為字串結束。

返回值gets()若成功則返回s指標,返回null則表示有錯誤發生。

範例 #include

main()

執行 this is a test /*輸入*/this is a test /*輸出*/

麵包車很少用黑色是因為什麼

一隻會生氣的河豚 因為不安全。研究發現,黑色汽車是最容易發生事故的,這一點所有車型都是一樣的,在晚上,黑色汽車事故率比白色汽車高47 本來就皮薄的麵包車在安全方面完全比不上商務車,所以麵包車需要降低出車禍的概率,沒有黑色款也屬表相降低出車禍的概率。汽車顏色中,黑色是公認最不耐髒的車身顏色。其實準確來...

為什麼淡水魚很少用來醃製鹹魚的

不是這樣的,海魚和淡水魚都可以製作成鹹魚。1 鹹魚是以鹽醃漬後,晒乾的魚。以前因為沒有低溫保鮮技術,魚很容易腐爛。因此世界各地沿海的漁民都有以此方法儲存魚。在中國古代,鹹魚稱作 鮑魚 並有 鮑魚之肆 此一成語 此非現在作為名貴海產的鮑魚 2 廣東鹹魚中以馬友著名,是梅香鹹魚的一種,有濃烈而特別的氣味...

c語言中char str括號裡為什麼是

這表示的是字元陣列,128是字元陣列長 不是字串長 char str 456 也是可以的。其中每個成員的值在 128 127之間,str 0 str 455 每個值不能超過127.如果超過,則擷取低位位元組存貯。題目裡是統計輸入字串中小寫英文字母個數,開頭用的就是這個。這個就好理解了。ascii 就...