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'。
其行為方式如下:
(1)遇到換行或檔案結束eof則返回。
(2)按行讀取。
(3)每一行結束處的換行字元『\n』也算該行字元。
(4)對於大小為size的buf,最多隻讀取size-1個字元。
(5)自動地把buf中最後乙個字元(通常是換行符)的後面乙個位元組填充零結束符('\0')。
因此如果想把buf中的換行符去掉,可以這樣:buf[strlen(buf)-1] = '\0';當前前提是buf足夠大,可以容納完整的一行(包括最後的那個換行符)。
int fputs(const char *s, file *stream);
返回值:成功返回乙個非負整數,出錯返回eof
fputs向指定的檔案寫入乙個字串,puts向標準輸出寫入乙個字串。
緩衝區s中儲存的是以'\0'結尾的字串,fputs將該字串寫入檔案stream,但並不寫入結尾的'\0'。與fgets不同的是,fputs並不關心的字串中的'\n'字元,字串中可以有'\n'也可以沒有'\n'。puts將字串s寫到標準輸出(不包括結尾的'\0'),然後自動寫乙個' \n'到標準輸出。
(1)把str中零結束符之前的全部文字輸入到檔案中。
(2)輸入完成後,不會增加額外的特殊字元,如換行符等。
如果想輸入完str後,就換行,則應該在上述呼叫後,再呼叫fputc('\n',fp);才行。
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函式
include char fgets char s,int size,file stream 功能 從檔案流讀取一行,送到緩衝區,使用時注意以下幾點 返回值 成功時s指向哪返回的指標就指向哪,出錯或者讀到檔案末尾時返回nul fgets函式,引數s是緩衝區的首位址,size是緩衝區的長度,該函式從s...