buf表示存放讀入一個(gè)數(shù)據(jù)的地址指針;size表示讀出的字節(jié)數(shù);count表示讀出數(shù)據(jù)項(xiàng)的個(gè)數(shù);fp表示文件型指針。
創(chuàng)新互聯(lián)公司主要從事網(wǎng)站設(shè)計(jì)、成都網(wǎng)站制作、網(wǎng)頁(yè)設(shè)計(jì)、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務(wù)。立足成都服務(wù)安國(guó),10余年網(wǎng)站建設(shè)經(jīng)驗(yàn),價(jià)格優(yōu)惠、服務(wù)專業(yè),歡迎來(lái)電咨詢建站服務(wù):18982081108
例如:fread(f,4,2,fp);
其中,f是一個(gè)實(shí)型數(shù)組名,在內(nèi)存中占4個(gè)字節(jié)。該語(yǔ)句功能是從fp所指向的文件中讀入兩個(gè)4字節(jié)的數(shù)據(jù)到f中。
buf是buffer的簡(jiǎn)寫(xiě),緩沖區(qū)的意思,一般要讀多少字節(jié)的信息需要一個(gè)臨時(shí)的
char
buf[4096]這樣的存儲(chǔ)區(qū)。
buf的意思是緩沖區(qū), 它本質(zhì)上就是一段存儲(chǔ)數(shù)據(jù)的內(nèi)存。
1、在C語(yǔ)言編程中一般用數(shù)組來(lái)表示一個(gè)緩沖區(qū)。
如下:
char?buf[256]?=?{0};??//定義一個(gè)數(shù)組作為緩沖區(qū)。
2、C語(yǔ)言編譯器生成程序后,每個(gè)程序自身的運(yùn)行也需要緩沖區(qū),一般叫做堆棧,它們的默認(rèn)大小一般是1MB。
3、如果數(shù)據(jù)超出了緩沖區(qū)的大小,即為溢出,在C語(yǔ)言中如果用戶定義的數(shù)組在棧區(qū),當(dāng)發(fā)生溢出時(shí),稱做棧溢出。
4、如果用戶定義的數(shù)組在堆區(qū),當(dāng)發(fā)生溢出時(shí),稱為堆溢出,溢出不僅可能導(dǎo)致程序崩潰,而且可能會(huì)給程序帶來(lái)安全性問(wèn)題。
擴(kuò)展資料
1、在不同速度的設(shè)備之間傳遞數(shù)據(jù)需要使用緩沖區(qū)。
2、C語(yǔ)言中的函數(shù)和高中數(shù)學(xué)的函數(shù)是不同的。數(shù)學(xué)中的函數(shù)是一個(gè)具體的解析表達(dá)式。
3、在鍵盤(pán)上輸入的內(nèi)容首先進(jìn)入輸入緩沖區(qū),程序從輸入緩沖區(qū)里獲得數(shù)字,先進(jìn)入輸入緩沖區(qū)的數(shù)字必須首先被處理。
setjmp
與刺激的abort()和exit()相比,goto語(yǔ)句看起來(lái)是處理異常的更可行方案。不幸的是,goto是本地的:它只能跳到所在函數(shù)內(nèi)部的標(biāo)號(hào)上,而不能將控制權(quán)轉(zhuǎn)移到所在程序的任意地點(diǎn)(當(dāng)然,除非你的所有代碼都在main體中)。
為了解決這個(gè)限制,C函數(shù)庫(kù)提供了setjmp()和longjmp()函數(shù),它們分別承擔(dān)非局部標(biāo)號(hào)和goto作用。頭文件setjmp.h申明了這些函數(shù)及同時(shí)所需的jmp_buf數(shù)據(jù)類型。
原理非常簡(jiǎn)單:
1.setjmp(j)設(shè)置“jump”點(diǎn),用正確的程序上下文填充jmp_buf對(duì)象j。這個(gè)上下文包括程序存放位置、棧和框架指針,其它重要的寄存器和內(nèi)存數(shù)據(jù)。當(dāng)初始化完jump的上下文,setjmp()返回0值。
2. 以后調(diào)用longjmp(j,r)的效果就是一個(gè)非局部的goto或“長(zhǎng)跳轉(zhuǎn)”到由j描述的上下文處(也就是到那原來(lái)設(shè)置j的setjmp()處)。當(dāng)作為長(zhǎng)跳轉(zhuǎn)的目標(biāo)而被調(diào)用時(shí),setjmp()返回r或1(如果r設(shè)為0的話)。(記住,setjmp()不能在這種情況時(shí)返回0。)
通過(guò)有兩類返回值,setjmp()讓你知道它正在被怎么使用。當(dāng)設(shè)置j時(shí),setjmp()如你期望地執(zhí)行;但當(dāng)作為長(zhǎng)跳轉(zhuǎn)的目標(biāo)時(shí),setjmp()就從外面“喚醒”它的上下文。你可以用longjmp()來(lái)終止異常,用setjmp()標(biāo)記相應(yīng)的異常處理程序。
在你舉得代碼中,第一次運(yùn)行到if(setjmp(buf)!=0) 時(shí),setjmp(buf)設(shè)置了一個(gè)GOTO點(diǎn),然后返回值為0, 所以不進(jìn)入if,然后繼續(xù)運(yùn)行到longjmp(buf , 1);這個(gè)時(shí)候會(huì)跳到setjmp(buf)處,同時(shí)返回longjmp的第二個(gè)參數(shù)值,即1. 此時(shí)if判斷成立,就輸出b,值為5,退出程序。
本文標(biāo)題:c語(yǔ)言buf函數(shù) c語(yǔ)言buf什么意思
當(dāng)前網(wǎng)址:http://www.chinadenli.net/article0/dohieio.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供企業(yè)建站、定制網(wǎng)站、ChatGPT、搜索引擎優(yōu)化、商城網(wǎng)站、App設(shè)計(jì)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
移動(dòng)網(wǎng)站建設(shè)知識(shí)