fgets函式與fputs函式

2021-06-02 12:55:17 字數 1280 閱讀 4779

#i nclude

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'。

#i nclude

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函式

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

fgets函式與fputs函式

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