fgets函數(shù)和緩沖區(qū)示例

fgets函數(shù)是gets函數(shù)的替代品眷蜓,C11標(biāo)準(zhǔn)已經(jīng)廢除gets函數(shù).

  • fgets函數(shù)的第2個(gè)參數(shù), 它指明了讀入字符的最大數(shù)量,一般傳入數(shù)組的長(zhǎng)度,如果該參數(shù)的值是n单山,那么fgets將讀入包括換行符在內(nèi)的n-1個(gè)字符,數(shù)組最后一個(gè)位置會(huì)自動(dòng)存空字符'\0'.
  • fget的返回值為一個(gè)char *指針,指向輸入的內(nèi)容第一個(gè)字符

下面回顯程序去掉了fgets讀取的換行符,如果輸入字符過(guò)多則丟棄

#include <stdio.h>
#define STLEN 10
int main(void)
{
    char words[STLEN];
    int i;
    
    puts("Enter strings (empty line to quit):");
    puts("------------------");        
    while (fgets(words, STLEN, stdin) != NULL
                          && words[0] != '\n')
    {   

        i = 0;
        while (words[i] != '\n' && words[i] != '\0')
            i++;
        if (words[i] == '\n')
        {
            printf("i = %u  replace \'\\n\'  to \'\\0\' \n",i);
            words[i] = '\0';
        }
        else // must have words[i] == '\0'
        {   
            printf("words[%u] == \'\\0\' \n",i);
            while (getchar() != '\n')// 獲取緩沖區(qū)下一個(gè)字符
                // continue;//作用是丟棄剩余的字符
                puts("continue");
        }

        // for(int j=0;j<STLEN;j++){
        //     printf(" words[%d] to int is %u \n",j,words[j]);
        // }
        puts(words);
        puts("------------------");        
    }
    puts("done");
    return 0;
}

下面是程序的輸出示例

Enter strings (empty line to quit):
------------------
12345678
words[8] replace '\n'  to '\0'
12345678

鍵盤(pán)輸入12345678榨馁,那么包括回車(chē)換行符共向程序緩沖區(qū)輸入了9個(gè)字符:12345678\n,fgets 全部獲得.
則存在數(shù)組中的為10個(gè)字符:12345678\n'\0',然后替換成了12345678'\0''\0'
------------------
123456789
words[9] == '\0'
123456789

輸入123456789\n, 緩沖區(qū)共10個(gè)字符, fgets獲得9個(gè)字符黎休,則存在數(shù)組中的為123456789'\0'
此時(shí)還有個(gè)換行符\n存在緩沖區(qū),由getchar()取出,然后什么都不做進(jìn)入下一輪主循環(huán)
------------------
1234567890
words[9] == '\0'
continue
123456789

輸入1234567890\n, 緩沖區(qū)共11個(gè)字符, fgets獲得9個(gè)字符,則存在數(shù)組中的為123456789'\0'
此時(shí)還有個(gè)0和換行符在緩沖區(qū),getchar()先取出0打印continue然后取出換行符while結(jié)束,進(jìn)入下一輪主循環(huán)
------------------
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末式镐,一起剝皮案震驚了整個(gè)濱河市涛癌,隨后出現(xiàn)的幾起案子犯戏,更是在濱河造成了極大的恐慌,老刑警劉巖拳话,帶你破解...
    沈念sama閱讀 218,858評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件先匪,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡弃衍,警方通過(guò)查閱死者的電腦和手機(jī)呀非,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,372評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)镜盯,“玉大人岸裙,你說(shuō)我怎么就攤上這事⌒魏模” “怎么了哥桥?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,282評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)激涤。 經(jīng)常有香客問(wèn)我拟糕,道長(zhǎng),這世上最難降的妖魔是什么倦踢? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,842評(píng)論 1 295
  • 正文 為了忘掉前任送滞,我火速辦了婚禮,結(jié)果婚禮上辱挥,老公的妹妹穿的比我還像新娘犁嗅。我一直安慰自己,他們只是感情好晤碘,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,857評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布褂微。 她就那樣靜靜地躺著,像睡著了一般园爷。 火紅的嫁衣襯著肌膚如雪宠蚂。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,679評(píng)論 1 305
  • 那天童社,我揣著相機(jī)與錄音求厕,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛呀癣,可吹牛的內(nèi)容都是我干的美浦。 我是一名探鬼主播,決...
    沈念sama閱讀 40,406評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼项栏,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼浦辨!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起忘嫉,我...
    開(kāi)封第一講書(shū)人閱讀 39,311評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤荤牍,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后庆冕,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,767評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡劈榨,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,945評(píng)論 3 336
  • 正文 我和宋清朗相戀三年访递,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片同辣。...
    茶點(diǎn)故事閱讀 40,090評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡拷姿,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出旱函,到底是詐尸還是另有隱情响巢,我是刑警寧澤,帶...
    沈念sama閱讀 35,785評(píng)論 5 346
  • 正文 年R本政府宣布棒妨,位于F島的核電站踪古,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏券腔。R本人自食惡果不足惜伏穆,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,420評(píng)論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望纷纫。 院中可真熱鬧枕扫,春花似錦、人聲如沸辱魁。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,988評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)染簇。三九已至参滴,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間剖笙,已是汗流浹背卵洗。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,101評(píng)論 1 271
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人过蹂。 一個(gè)月前我還...
    沈念sama閱讀 48,298評(píng)論 3 372
  • 正文 我出身青樓十绑,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親酷勺。 傳聞我的和親對(duì)象是個(gè)殘疾皇子本橙,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,033評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • 官網(wǎng) 中文版本 好的網(wǎng)站 Content-type: text/htmlBASH Section: User ...
    不排版閱讀 4,383評(píng)論 0 5
  • PHP常用函數(shù)大全 usleep() 函數(shù)延遲代碼執(zhí)行若干微秒。 unpack() 函數(shù)從二進(jìn)制字符串對(duì)數(shù)據(jù)進(jìn)行解...
    上街買(mǎi)菜丶迷倒老太閱讀 1,369評(píng)論 0 20
  • 總結(jié)了一些開(kāi)發(fā)中常用的函數(shù): usleep() //函數(shù)延遲代碼執(zhí)行若干微秒脆诉。 unpack() //函數(shù)從二進(jìn)制...
    ADL2022閱讀 454評(píng)論 0 3
  • 在記憶深處可以清晰地看見(jiàn)許多事情甚亭,許多開(kāi)始是模糊的樣子,后來(lái)慢慢變得清晰起來(lái)击胜,但一切都只是泛黃的回憶亏狰。有人選擇用文...
    南有麋鹿0io閱讀 763評(píng)論 0 1
  • 英文部分及圖片來(lái)自“經(jīng)濟(jì)學(xué)人”雜志。譯文是個(gè)人學(xué)習(xí)偶摔、欣賞語(yǔ)言之用暇唾,謝絕轉(zhuǎn)載或用于任何商業(yè)用途。本人同意簡(jiǎn)書(shū)平臺(tái)在接...
    開(kāi)心果兒92閱讀 544評(píng)論 0 0