日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

fgets函数

發(fā)布時(shí)間:2025/4/16 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 fgets函数 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

fgets從指定的文件中讀一行字符到調(diào)用者提供的緩沖區(qū)中,gets從標(biāo)準(zhǔn)輸入讀一行字符到調(diào)用者提供的緩沖區(qū)中。

#include <stdio.h>char *fgets(char *s, int size, FILE *stream); char *gets(char *s); 返回值:成功時(shí)s指向哪返回的指針就指向哪,出錯(cuò)或者讀到文件末尾時(shí)返回NULL

gets函數(shù)無需解釋,Man Page的BUGS部分已經(jīng)說得很清楚了:Never use gets()。gets函數(shù)的存在只是為了兼容以前的程序,我們寫的代碼都不應(yīng)該調(diào)用這個(gè)函數(shù)。gets函數(shù)的接口設(shè)計(jì)得很有問題,就像strcpy一樣,用戶提供一個(gè)緩沖區(qū),卻不能指定緩沖區(qū)的大小,很可能導(dǎo)致緩沖區(qū)溢出錯(cuò)誤,這個(gè)函數(shù)比strcpy更加危險(xiǎn),strcpy的輸入和輸出都來自程序內(nèi)部,只要程序員小心一點(diǎn)就可以避免出問題,而gets讀取的輸入直接來自程序外部,用戶可能通過標(biāo)準(zhǔn)輸入提供任意長的字符串,程序員無法避免gets函數(shù)導(dǎo)致的緩沖區(qū)溢出錯(cuò)誤,所以唯一的辦法就是不要用它。

現(xiàn)在說說fgets函數(shù),參數(shù)s是緩沖區(qū)的首地址,size是緩沖區(qū)的長度,該函數(shù)從stream所指的文件中讀取以'/n'結(jié)尾的一行(包括'/n'在內(nèi))存到緩沖區(qū)s中,并且在該行末尾添加一個(gè)'/0'組成完整的字符串。

如果文件中的一行太長,fgets從文件中讀了size-1個(gè)字符還沒有讀到'/n',就把已經(jīng)讀到的size-1個(gè)字符和一個(gè)'/0'字符存入緩沖區(qū),文件中剩下的半行可以在下次調(diào)用fgets時(shí)繼續(xù)讀

如果一次fgets調(diào)用在讀入若干個(gè)字符后到達(dá)文件末尾,則將已讀到的字符串加上'/0'存入緩沖區(qū)并返回,如果再次調(diào)用fgets則返回NULL,可以據(jù)此判斷是否讀到文件末尾。

注意,對于fgets來說,'/n'是一個(gè)特別的字符,而'/0'并無任何特別之處,如果讀到'/0'就當(dāng)作普通字符讀入。如果文件中存在'/0'字符(或者說0x00字節(jié)),調(diào)用fgets之后就無法判斷緩沖區(qū)中的'/0'究竟是從文件讀上來的字符還是由fgets自動(dòng)添加的結(jié)束符,所以fgets只適合讀文本文件而不適合讀二進(jìn)制文件,并且文本文件中的所有字符都應(yīng)該是可見字符,不能有'/0'。

fputs向指定的文件寫入一個(gè)字符串,puts向標(biāo)準(zhǔn)輸出寫入一個(gè)字符串。

#include <stdio.h>int fputs(const char *s, FILE *stream); int puts(const char *s); 返回值:成功返回一個(gè)非負(fù)整數(shù),出錯(cuò)返回EOF

緩沖區(qū)s中保存的是以'/0'結(jié)尾的字符串,fputs將該字符串寫入文件stream,但并不寫入結(jié)尾的'/0'。與fgets不同的是,fputs并不關(guān)心的字符串中的'/n'字符,字符串中可以有'/n'也可以沒有'/n'。puts將字符串s寫到標(biāo)準(zhǔn)輸出(不包括結(jié)尾的'/0'),然后自動(dòng)寫一個(gè)'/n'到標(biāo)準(zhǔn)輸出。

總結(jié)

以上是生活随笔為你收集整理的fgets函数的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。