天天看點

fgets函數 和 fputs函數

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

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

        傳回值:成功時s指向哪傳回的指針就指向哪,出錯或者讀到檔案末尾時傳回NUL

fgets函數,參數s是緩沖區的首位址,size是緩沖區的長度,該函數從stream所指的檔案中讀取以'\n'結尾的一行(包括'\n'在内)存到緩沖區s中,并且在該行末尾添加一個'\0'組成完整的字元串。

fgets()函數中,第一個參數指針需要我們事先配置設定好大小。另外,fgets()函數不适合取二進制的檔案,這樣,容易發生錯誤。

注:fgets從指定的檔案中讀一行字元到調用者提供的緩沖區中,gets從标準輸入讀一行字元到調用者提供的緩沖區中。

1.當遇到換行符或者緩沖區已滿,fgets就會停止,傳回讀到的資料,值得注意的是不能用fgets讀二進制檔案,因為fgets會把二進制檔案當成文本檔案來處理,這勢必會産生亂碼。

2.每次調用,fgets都會把緩沖區的最後一個字元設為null,這意味着最後一個字元不能用來存放需要的資料,是以如果有一行,含有LINE_SIZE個字元(包括換行符),要想把這行讀入緩沖區,請把參數n設為LINE_SIZE+1

3. 由結論1可推出:給定參數n,fgets隻能讀取n-1個字元(包括換行符),如果有一行超過n-1個字元,那麼fgets傳回一個不完整的行,也就是說,隻讀取該行的前n-1個字元,但是,緩沖區總是以null字元結尾,對fgets的下一次調用會繼續讀該行。

注意,對于fgets來說,'\n'是一個特别的字元,而'\0'并無任何特别之處,如 果讀到'\0'就當作普通字元讀入。如果檔案中存在'\0'字元(或者0x00位元組),調用fgets之後就無法判斷緩沖區中的'\0'究竟是從檔案讀上 來的字元還是由fgets自動添加的結束符,是以fgets隻适合讀文本檔案而不适合讀二進制檔案,并且文本檔案中的所有字元都應該是可見字元,不能有 '\0'。

#include

int fputs(const char *s, FILE *stream);

        int puts(const char *s);

傳回值:成功傳回一個非負整數,出錯傳回EOF

fputs向指定的檔案寫入一個字元串,puts向标準輸出寫入一個字元串。

緩沖區s中儲存的是以'\0'結尾的字元串,fputs将該字元串寫入檔案 stream,但并不寫入結尾的'\0'。與fgets不同的是,fputs并不關心的字元串中的'\n'字元,字元串中可以有'\n'也可以沒有' \n'。puts将字元串s寫到标準輸出(不包括結尾的'\0'),然後自動寫一個' \n'到标準輸出。

本文轉自 ye小灰灰  51CTO部落格,原文連結:http://blog.51cto.com/10704527/1763098,如需轉載請自行聯系原作者

繼續閱讀