fgets函式的理解

2021-08-22 20:16:58 字數 688 閱讀 9039

fget函式的原型如下:char *fgets (char *buf, int n, file *fp)

功能:從檔案流讀取一行,送到緩衝區,使用時注意以下幾點:

1.當遇到換行符或者緩衝區已滿,fgets就會停止,返回讀到的資料,

注意的是不能用fgets讀二進位制檔案,因為fgets會把二進位制檔案當成文字檔案來處理,這勢必會產生亂碼。

2.每次呼叫,fgets都會把緩衝區的最後乙個字元設為 \0,這意味著最後乙個字元不能用來存放需要的資料,

所以如果有一行,含有 line_size 個字元(包括換行符),要想把這行讀入緩衝區,請把引數 n 設為 line_size+1

多留乙個位置儲存 \0

3. 由結論1可推出:給定引數n,fgets只能讀取n-1個字元(包括換行符),如果有一行超過n-1個字元,

那麼fgets返回乙個不完整的行,也就是說,只讀取該行的前n-1個字元,但是,緩衝區總是以 \0 字元結尾,

對fgets的下一次呼叫會繼續讀該行。

用法舉例:

讀取乙個檔案並列印之

file* fp = fopen(argv[1], "r");

char buf[200];

while(fgets(buf, 200, fp) != null)

注意列印不用使用 printf( "%s\n" ,buf),因為它會把換行符也讀進去

fgets函式的使用

以字串為單位的i o函式 2009年12月20日 星期日 14 59 fgets從指定的檔案中讀一行字元到呼叫者提供的緩衝區中,gets從標準輸入讀一行字元到呼叫者提供的緩衝區中。include char fgets char s,int size,file stream char gets cha...

fgets()函式的使用

雖然用gets 時有空格也可以直接輸入,但是 gets 有乙個非常大的缺陷,即它不檢查預留儲存區是否能夠容納實際輸入的資料,換句話說,如果輸入的字元數目大於陣列的長度,gets 無法檢測到這個問題,就會發生記憶體越界,所以程式設計時建議使用fgets fgets 的原型為 1 include 2 c...

fgets函式 sprintf函式

char fgets char restrict s,int n,file restrict stream 第乙個引數為資料存放的陣列,第二個引數為最大長度,第三個引數為輸入源,我們從鍵盤讀入,引數為stdin 可以看到fgets 讀取的字串長度包含了結尾的 0 遍歷陣列時要注意下標越界。strle...