-----------------------------------------------------------------------------------------------------------------------
10年積累的成都做網站、網站制作經驗,可以快速應對客戶對網站的新想法和需求。提供各種問題對應的解決方案。讓選擇我們的客戶得到更好、更有力的網絡服務。我雖然不認識你,你也不認識我。但先建設網站后付款的網站建設流程,更有承德縣免費網站建設讓你可以放心的選擇與我們合作。
fgets函數原型如下:
char *fgets(char *s,int n,FILE *stream);
它一次從文件中讀取一行,包括換行符,放入字符串s中,并且加上字符串結束標志符'\0'。參數n代表緩沖區s中最多能容納多少個字符(不算結尾標志符'\0')。
fgets函數返回一個char類型的指針,和s指向同一個地方。如果在沒有數據可以讀取,那么函數就返回NULL。
----------------------------------------------------------------------------------------------------------------------
下面的程序將文本文件students.txt的內容依次讀到字符串s中輸出
#includestdio.h
#includestdlib.h
#define MAX 200
int main()
{
FILE *fpSrc;
char szLine[MAX];
fpSrc=fopen("students.txt","r");
//文件要指明路徑
if(NULL==fpSrc)
{
printf("文件讀取失敗!");
exit(1);
}
while(fgets(szLine,MAX-1,fpSrc))//從文件中讀取一行寫入到字符串szLine中,直到fgets函數返回NULL
printf("%s\n",szLine);//打印出讀取的內容
fclose(fpSrc);//關閉文件流
return 0;
}
從流中讀一行或指定個字符,原型是char*fgets(char*s,intn,FILE*stream);從流中讀取n-1個字符,除非讀完一行,參數s是來接收字符串,如果成功則返回s的指針,否則返回NULL。
*string結果數據的首地址;n-1:一次讀入數據塊的長度,其默認值為1k,即1024;stream文件指針fgets的返回值是個指針,*fgets(buffer,100,stdin)就是取返回指針所指向地址的第一個字符,fgets的返回值是char*.要是輸入一串字符,返回的第一字符一定不是\n如果要是一個空行,第一個一定是\n,所以會推出循環,如果while中的兩個條件都滿足,就會進入循環繼續計算。
擴展資料:
一、函數原型是:char *fgets(char *s, int n, FILE *stream);
從文件結構體指針stream中讀取數據,每次讀取一行。讀取的數據保存在buf指向的字符數組中,每次最多讀取bufsize-1個字符(第bufsize個字符賦'\0'),如果文件中的該行,不足bufsize-1個字符,則讀完該行就結束。
如若該行(包括最后一個換行符)的字符數超過bufsize-1,則fgets只返回一個不完整的行,但是,緩沖區總是以NULL字符結尾,對fgets的下一次調用會繼續讀該行。
函數成功將返回buf,失敗或讀到文件結尾返回NULL。因此我們不能直接通過fgets的返回值來判斷函數是否是出錯而終止的,應該借助feof函數或者ferror函數來判斷。
二、與gets相比使用這個好處是:讀取指定大小的數據,避免gets函數從stdin接收字符串而不檢查它所復制的緩存的容積導致的緩存溢出問題。
三、功能:
1、《UNIX 環境高級編程》中指出,每次調用fgets函數會造成標準輸出設備自動刷清!案例詳見《UNIX環境高級編程(第二版)》中程序清單1-5和課后習題5.7,習題5.7的答案中給出了相關的論述。
2、初入門者,大多數是在WINDOWS下,使用VS進行練習的。此環境下,對注意1中的情況進行測試,并不能看到案例中所描述的情景,因為具體的實現不同。
stream文件流指針體指向文件內容地址的偏移原則
例:
如果一個文件的當前位置的文本如下
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',并自動加上字符串結束符'\0'),當前文件位置移至下一行,雖然23大于當前行上字符總和,可是不會繼續到下一行。而下一次調用fgets()繼續讀取的時候是從下一行開始讀。
參考資料:百度百科-fgets
fgets()函數用于從文件流中讀取一行或指定個數的字符,其原型為:
char
*
fgets(char
*
string,
int
size,
FILE
*
stream);
參數說明:
string為一個字符數組,用來保存讀取到的字符。
size為要讀取的字符的個數。如果該行字符數大于size-1,則讀到
size-1
個字符時結束,并在最后補充'
\0';如果該行字符數小于等于
size-1,則讀取所有字符,并在最后補充
'\0'。即,每次最多讀取
size-1
個字符。
stream為文件流指針。
【返回值】讀取成功,返回讀取到的字符串,即string;失敗或讀到文件結尾返回NULL。因此我們不能直接通過fgets()的返回值來判斷函數是否是出錯而終止的,應該借助feof()函數或者ferror()函數來判斷。
注意:fgets()與gets()不一樣,不僅僅是因為gets()函數只有一個參數
FILE
*stream,更重要的是,fgets()可以指定最大讀取的字符串的個數,杜絕了gets()使用不當造成緩存溢出的問題。
網站欄目:c語言fgets函數例子,c語言fgetpos
URL鏈接:http://m.kartarina.com/article18/hddddp.html
成都網站建設公司_創新互聯,為您提供定制開發、虛擬主機、微信小程序、動態網站、品牌網站建設、網站制作
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯