百科fgets()用法

fgets編輯

從文件結構體指針stream中讀取數據,每次讀取一行。讀取的數據保存在buf指向的字符數組中,每次最多讀取bufsize-1個字符(第bufsize個字符賦''), 若是文件中的該行,不足bufsize個字符,則讀完該行就結束。如若該行(包括最後一個換行符)的字符數超過bufsize-1,則fgets只返回一個不完整的行,可是,緩衝區老是以NULL字符結尾,對fgets的下一次調用會繼續讀該行。函數成功將返回buf,失敗或讀到文件結尾返回NULL。所以咱們不能直接經過fgets的返回值來判斷函數是不是出錯而終止的,應該藉助feof函數或者ferror函數來判斷。
外文名
fgets
功    能
標準輸出設備自動刷清
函數使用
鍵盤輸入fgets(key,n,stdin)
長    度
1 字節的字符串
 
 

1函數 (ISO C)編輯

函數原型

char *fgets(char *buf, int bufsize, FILE *stream);

參數

 
*buf: 字符型指針,指向用來存儲所得數據的地址。
bufsize: 整型數據,指明存儲數據的大小。
*stream: 文件結構體指針,將要讀取的文件流。

返回值

  1. 成功,則返回第一個參數buf;
  2. 在讀字符時遇到 end-of-file,則eof指示器被設置,若是還沒讀入任何字符就遇到這種狀況,則buf保持原來的內容,返回NULL;
  3. 若是發生讀入錯誤,error指示器被設置,返回NULL,buf的值可能被改變。 [1]

功能

注意:《UNIX 環境高級編程》中指出,每次調用fgets函數會形成標準輸出設備自動刷清!案例詳見《UNIX環境高級編程(第二版)》中程序清單1-5和課後習題5.7,習題5.7的答案中給出了相關的論述。
stream文件流指針體指向文件內容地址的偏移原則
若是使用fgets()讀取某個文件,第一次讀取的bufsize爲5,而文件的第一行有10個字符(算上'\n'),那麼讀取文件的指針會偏移至當前讀取完的這個字符以後的位置。也就是第二次再用fgets()讀取文件的時候,則會繼續讀取其後的字符。而,若是使用fgets() 讀取文件的時候bufsize大於該行的字符總數加2(多出來的兩個,一個保存文件自己的'\n'換行,一個保存字符串自己的結束標識''),文件並不會繼續讀下去,僅僅只是這一行讀取完,隨後指向文件的指針會自動偏移至下一行。
例:
若是一個文件的當前位置的文本以下
Love, I Have
Since you can do it.
若是用fgets(str1,6,file1);去讀取
則執行後str1 = "Love," ,讀取了6-1=5個 字符
這個時候再執行fgets(str1,20,file1)則執行後str1 = " I Have\n"
而若是
fgets(str1,23,file1);
則執行str1="Love ,I Have",讀取了一行(包括行尾的'\n',並自動加上字符串結束符''),當前文件位置移至下一行,雖然23大於當前行上字符總和,但是不會繼續到下一行。而下一次調用fgets()繼續讀取的時候是從下一行開始讀。

序例

     
     
     
     
     
#include<string.h>#include<stdio.h> int main ( void ){ FILE*stream; charstring[]="Thisisatest"; charmsg[20];/*openafileforupdate*/ stream=fopen("DUMMY.FIL","w+");/*writeastringintothefile*/ fwrite(string,strlen(string),1,stream);/*seektothestartofthefile*/ fseek(stream,0,SEEK_SET);/*readastringfromthefile*/ fgets(msg,strlen(string)+1,stream);/*displaythestring*/ printf("%s",msg); fclose(stream); return0;}

fgets函數用來從文件中讀入字符串。fgets函數的調用形式以下:fgets(str,n,fp);此處,fp是 文件指針;str是存放在字符串的起始地址;n是一個int類型 變量。函數的功能是從fp所指文件中讀入n-1個字符放入str爲起始地址的空間內;若是在未讀滿n-1個字符之時,已讀到一個換行符或一個EOF(文件結束標誌),則結束本次讀操做,讀入的字符串中最後包含讀到的換行符。所以,確切地說,調用fgets函數時,最多隻能讀入n-1個字符。讀入結束後,系統將自動在最後加'',並以str做爲函數值返回。
函數原型是:char *fgets(char *s, int n, FILE *stream);

2函數使用編輯

同時能夠用做鍵盤輸入:fgets(key,n,stdin)且還必須:key[strlen(key)-1]=''
還有種程序常常使用的方法:key[strlen(key-1)]=0x00;
與gets相比使用這個好處是:讀取指定大小的數據,避免gets函數從stdin接收字符串而不檢查它所複製的緩存的容積致使的緩存溢出問題

fgets

(PHP 3, PHP 4, PHP 5)
fgets -- 從文件指針中讀取一行

說明

string fgets ( int handle, [ int length] )
從 handle 指向的文件中讀取一行並返回長度最多爲 length - 1 字節的字符串。碰到換行符(包括在返回值中)、EOF 或者已經讀取了 length - 1 字節後中止(看先碰到那一種狀況)。若是沒有指定 length,則默認爲 1K,或者說 1024 字節。
出錯時返回 FALSE。

例子

     
     
     
     
     
<?php$handle=fopen("/tmp/inputfile.txt","r");while(!feof($handle)){$buffer=fgets($handle,4096);echo$buffer;}fclose($handle);?>

 

相關文章
相關標籤/搜索