說明:如果您有任何疑問或想咨詢其他業(yè)務(wù)請撥打電話 400 685 0732
全網(wǎng)監(jiān)測海量數(shù)據(jù)按需發(fā)布監(jiān)測預(yù)警
實(shí)時(shí)把握輿情動(dòng)態(tài)精準(zhǔn)追溯信息源頭
一個(gè)函數(shù)該如何使用?我們最先要了解的就是這個(gè)函數(shù)的語法以及具體的含義是什么,所以今天我們就來看一看fgets函數(shù)在實(shí)際的運(yùn)用過程當(dāng)中是如何使用的,希望能給大家?guī)硪欢ǖ膸椭?/p>
fgets函數(shù)——linux中fgets函數(shù)如何理解
fgets函數(shù)是從輸入流中讀取一個(gè)字符串,它是遇到換行符,或者傳輸了限定的字符數(shù)量,或者遇到EOF文件尾就停止(它會(huì)把換行符也加到接收字符串里面)。fgets函數(shù)的原型是:
char*fgets(char*s,intn,FILE*stream);
函數(shù)參數(shù)說明:第一個(gè)參數(shù)是接收參數(shù),用于接收輸入文件流的字符串,第二個(gè)參數(shù)n是字符串傳輸長度限定參數(shù),表示當(dāng)接收了n-1個(gè)字符時(shí)停止寫入,第三個(gè)參數(shù)是文件流(就是fopen函數(shù)返回的文件流),也可以是輸入流stdin。使用這個(gè)函數(shù)需要include頭文件。
fgets函數(shù)和scanf的%s參數(shù)的區(qū)別是:scanf接收輸入字符串時(shí),是遇到空白字符就停止,而且scanf無法限定接收字符串的長度。
fgets函數(shù)如何用
fget函數(shù)的原型如下:char*fgets(char*buf,intn,FILE*fp)
功能:從文件流讀取一行,送到緩沖區(qū),使用時(shí)注意以下幾點(diǎn):
1.當(dāng)遇到換行符或者緩沖區(qū)已滿,fgets就會(huì)停止,返回讀到的數(shù)據(jù),值得注意的是不能用fgets讀二進(jìn)制文件,因?yàn)閒gets會(huì)把二進(jìn)制文件當(dāng)成文本文件來處理,這勢必會(huì)產(chǎn)生亂碼。
2.每次調(diào)用,fgets都會(huì)把緩沖區(qū)的最后一個(gè)字符設(shè)為null,這意味著最后一個(gè)字符不能用來存放需要的數(shù)據(jù),所以如果有一行,含有LINE_SIZE個(gè)字符(包括換行符),要想把這行讀入緩沖區(qū),請把參數(shù)n設(shè)為LINE_SIZE+1
3.由結(jié)論1可推出:給定參數(shù)n,fgets只能讀取n-1個(gè)字符(包括換行符),如果有一行超過n-1個(gè)字符,那么fgets返回一個(gè)不完整的行,也就是說,只讀取該行的前n-1個(gè)字符,但是,緩沖區(qū)總是以null字符結(jié)尾,對fgets的下一次調(diào)用會(huì)繼續(xù)讀該行。
用法舉例:
讀取一個(gè)文件并打印
FILE*fp=fopen(argv[1],”r”);
charbuf[200];
while(fgets(buf,200,fp)!=NULL){/*每行的字符不能超過199才能正常工作*/
printf(“%s”,buf);
}
注意打印不用使用printf(“%s/n”,buf),因?yàn)樗鼤?huì)把換行符也讀進(jìn)去
以上就是fgets函數(shù)該如何使用的所有內(nèi)容,學(xué)習(xí)函數(shù)最先就是學(xué)習(xí)函數(shù)的一些語法,以及這些參數(shù)的含義,只有這些弄懂了,在實(shí)際運(yùn)用當(dāng)中才會(huì)熟練的運(yùn)用,如果大家還想了解更多與之有關(guān)的內(nèi)容,歡迎關(guān)注我們文軍營銷的官網(wǎng)。
說明:如果您有任何疑問或想咨詢其他業(yè)務(wù)請撥打電話 400 685 0732