亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C > 正文

深入解析GetChar的緩存機制

2020-02-24 14:27:28
字體:
來源:轉載
供稿:網友

在C/C++語言中,通常使用字符數組和MalC/Nead等內存分配函數來實現緩沖器,本文是武林技術頻道小編為大家帶來的深入解析GetChar的緩存機制,希望對你學習這方面知識有幫助!

第一個例子(與getchar有關):

?

#include<stdio.h>?
int main()?
{?
??? int ch;?
??? ch=getchar();?
??? ch=getchar();?
??? printf("%d/n",ch);?
??? return 0;?
}?


代碼如上,當輸入一個字符按下回車后程序沒有等待你二次輸入就結束了,而且無論輸入什么運行結果均是10,是不是很奇怪(反正我第一次遇到時感覺是很奇怪),更奇怪的是當你一次性輸入多個字符如abcd結果又正確的打印出了98,為什么呢?這就是緩沖區的原因。

?

解釋如下:getchar定義在stdio.h文件中,我們在stdio.h中可以找到其相關的定義:

?

#define getchar()???????? getc(stdin)//即getchar等同于調用getc(stdin)


我們又找到getc的定義

?

?

?


#define getc(_stream)???? (--(_stream)->_cnt >= 0 /?
??????????????? ? 0xff & *(_stream)->_ptr++ : _filbuf(_stream))?


將其展開即得:

?

?

?


if(--(stdin)->_cnt>=0)?
  ??? return 0xff&*(stdin)->ptr++;?

?

?

?


else?
??????? return filbuf(stdin);?


代碼譯如下stdin是標準輸入流,查看MSDN與stdio.h中可以看到定義如下:

?

Stdio.h中:

?

#define stdin? (&_iob[0])?


跟蹤即可得:

?

?

?


_CRTIMP extern FILE _iob[];?


從上面代碼可得_iob是FILE結構類型的,查看stdio.h中可以看到FILE結構體定義如下:

?

?

?


struct _iobuf {?
??????? char *_ptr;?
??????? int?? _cnt;?
??????? char *_base;?
??????? int?? _flag;?
??????? int?? _file;?
??????? int?? _charbuf;?
??????? int?? _bufsiz;?
??????? char *_tmpfname;?
??????? };?

?

?


從FILE結構中我們可以得到了上面getc宏定義中使用的_cnt,_ptr成員,但這些都是次要的,我們應該不難發現有這樣幾個成員_bufsize,_base分別對應的是緩沖區大小,緩沖區基地址,從這里得到一個顯而意見的結論就是getchar函數使用了緩沖機制。(_cnt對應的是緩沖區的輸入的字節數目,_ptr對應的是讀指針的位置)

?

getc宏定義詳解

?

--(stdin)->_cnt>=0?


此句判斷是否緩沖區內有數據,有的話就減一(表示又讀了一個),并讀取數據return 0xff&*(stdin)->ptr++,讀完成后,將讀指針向前移一個位置【重要】

?

好了,講了這么多都是鋪墊,現在回到正題為什么會出現上述結果:)

出現上述結果追根結底還是由于getchar函數使用了緩沖(看了上面的,我想大家也知道了,確實使用了緩沖),當輸入一個字符按下回車后程序沒有等待你二次輸入就結束了,而且無論輸入什么運行結果均是10,這是因為當用戶輸入了一個字符后,并按下回車后,緩沖中會存入用戶輸入的字符以及換行鍵的ASCII碼(10 ~)【略去的回車的ASCII碼13,可能是為了跨平臺,在Linux下,回車后就是換行10,Windows下回車是先回車回到首行,再換行,即13 10】(執行第一次getchar實際上是執行getc的else語句,填充緩存區后_cnt=2,_prt指向0位置,執行完后_cnt=1,_prt指向1位置),第二次執行getchar時,調用getc不會再執行else語句,執行的是if語句,故第二次不再等待用戶輸入了,直接執行,執行后cnt=0,prt指向位置2,并返回ptr指向位置1時的結果,即10,由于10為換行鍵,當執行遇到此時,會在執行完后清空緩存,ptr重新指向了位置0,cnt=0。

當輸入abc的時候分析一樣,只不過掃行了第二個getchar后,cnt=2,ptr指向了位置2。

以上就是關于深入解析GetChar的緩存機制,相信一定能幫到你的,如果你覺得我們的文章對你有用,建議你可以好好收藏,更多的專業知識就請關注武林技術頻道吧!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日本不卡免费高清视频| 久久久久久久久爱| 精品久久久香蕉免费精品视频| 91成人精品网站| 国产乱肥老妇国产一区二| 久久精品亚洲国产| 久久免费成人精品视频| 黑人精品xxx一区一二区| 亚洲电影免费观看高清完整版在线观看| 国产成人久久精品| 国产精品亚洲精品| 亚洲精品综合精品自拍| 日韩乱码在线视频| 欧美性视频精品| 精品成人69xx.xyz| 日韩欧美aⅴ综合网站发布| 国产精品7m视频| 精品福利在线观看| 欧美一级大片视频| 成人免费大片黄在线播放| 国内成人精品一区| 亚洲第一天堂av| 久久免费视频观看| 欧美激情高清视频| 91在线观看免费高清| 日本精品视频在线观看| 日韩免费高清在线观看| 欧美成人精品激情在线观看| 色先锋资源久久综合5566| 久热精品在线视频| 欧美国产高跟鞋裸体秀xxxhd| 久久免费高清视频| 亚洲精品久久久久久久久久久久久| 九九精品视频在线观看| www.日韩av.com| 国产黑人绿帽在线第一区| 精品亚洲国产成av人片传媒| 精品久久久久久久久久久久久久| 亚洲人成免费电影| 亚洲精品短视频| 日韩精品视频观看| 国产精品美女免费视频| 亚洲精品成人av| 亚洲精品成a人在线观看| 国产精品va在线播放| 亚洲精品动漫久久久久| 国产亚洲欧美日韩美女| 久久精品国产亚洲7777| 午夜欧美大片免费观看| 亚洲风情亚aⅴ在线发布| 欧美wwwwww| 欧美性生交xxxxx久久久| 久久久久久中文| 麻豆乱码国产一区二区三区| 欧美精品video| 久久男人资源视频| 日韩美女在线观看一区| 毛片精品免费在线观看| 成人免费福利在线| 欧美孕妇毛茸茸xxxx| 国产美女精品视频免费观看| 亚洲精品有码在线| y97精品国产97久久久久久| 永久555www成人免费| 日本91av在线播放| 日韩中文字幕网站| 亚洲精品动漫100p| 国产欧美久久一区二区| 国色天香2019中文字幕在线观看| 精品国产一区二区三区久久久狼| 2019中文在线观看| 2019最新中文字幕| 最近2019免费中文字幕视频三| 亚洲天堂av图片| 国产精品入口夜色视频大尺度| 久久久久久久影院| 国产亚洲精品久久久久久777| 欧美一区二区视频97| 国产欧美精品在线| 亚洲精品按摩视频| 国产精品96久久久久久又黄又硬| 91精品久久久久| 51精品国产黑色丝袜高跟鞋| 欧美一区二粉嫩精品国产一线天| 国产精品免费久久久久影院| 日韩精品视频免费专区在线播放| 久久国产精品亚洲| 久久中文字幕视频| 欧美性xxxx极品hd欧美风情| 久久综合久中文字幕青草| 91欧美视频网站| 色系列之999| 国产精品入口免费视频一| 欧美网站在线观看| 91在线观看免费网站| 国产精品久久久久福利| 日本电影亚洲天堂| 国产精品女人网站| 欧美高跟鞋交xxxxxhd| 亚洲视频第一页| 国产精品久久中文| 欧美激情视频给我| 欧美激情图片区| 2019中文在线观看| 国产精品免费视频久久久| 亚洲成人教育av| 成人免费福利视频| 亚洲第一福利视频| 91网站免费看| www.久久撸.com| 国产精品稀缺呦系列在线| 欧美高清一级大片| 欧美性xxxx在线播放| 亚洲国产欧美在线成人app| 久久精品电影网站| 国产亚洲人成a一在线v站| 自拍偷拍亚洲在线| 日av在线播放中文不卡| 国产精品久久久久久久9999| zzijzzij亚洲日本成熟少妇| 欧美日韩国产123| 精品久久久久久亚洲精品| 欧美一级大片在线免费观看| 欧美日韩精品国产| 成人h片在线播放免费网站| 国产精品稀缺呦系列在线| 91中文在线观看| 中文字幕亚洲一区二区三区五十路| 精品久久久久久中文字幕大豆网| 久久久久久久久久婷婷| 中日韩美女免费视频网站在线观看| 视频一区视频二区国产精品| 岛国视频午夜一区免费在线观看| 亚洲欧美另类自拍| 久久99久久99精品免观看粉嫩| 欧美亚洲视频在线观看| 亚洲视频一区二区| 一本久久综合亚洲鲁鲁| 欧美最猛性xxxxx(亚洲精品)| 亚洲一区www| 国产精品久久久久久久7电影| 久久久久久久久久久久久久久久久久av| 亚洲欧美日韩一区二区三区在线| 国产成人综合一区二区三区| 亚洲字幕一区二区| 欧美激情2020午夜免费观看| 欧洲成人在线视频| 亚洲a∨日韩av高清在线观看| 国产女人精品视频| 原创国产精品91| 96sao精品视频在线观看| 国产精品网站视频| 深夜福利91大全| 456亚洲影院| 91网在线免费观看| 成人免费网站在线观看| 亚洲欧美日本精品| 国产91|九色| 日韩在线小视频| 日韩成人在线播放| 91av中文字幕| 91久久国产综合久久91精品网站| 黑人巨大精品欧美一区免费视频| 国产精品igao视频|