fgets函式與fputs函式

2021-06-06 21:03:25 字數 1276 閱讀 7010

#include

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'到標準輸出。

fgets函式與fputs函式

華清遠見嵌入式培訓中心講師。include char fgets char s,int size,file stream 功能 從檔案流讀取一行,送到緩衝區,使用時注意以下幾點 返回值 成功時s指向哪返回的指標就指向哪,出錯或者讀到檔案末尾時返回nul fgets函式,引數s是緩衝區的首位址,siz...

fgets函式與fputs函式

i nclude char fgets char s,int size,file stream 功能 從檔案流讀取一行,送到緩衝區,使用時注意以下幾點 返回值 成功時s指向哪返回的指標就指向哪,出錯或者讀到檔案末尾時返回nul fgets函式,引數s是緩衝區的首位址,size是緩衝區的長度,該函式從...

fgets函式與fputs函式

char fgets char s,int size,file stream 功能 從檔案流讀取一行,送到緩衝區,使用時注意以下幾點 返回值 成功時s指向哪返回的指標就指向哪,出錯或者讀到檔案末尾時返回nul fgets函式,引數s是緩衝區的首位址,size是緩衝區的長度,該函式從stream所指的...