久久婷婷香蕉热狠狠综合,精品无码国产自产拍在线观看蜜,寡妇房东在做爰3,中文字幕日本人妻久久久免费,国产成人精品三上悠亚久久

當前位置:首頁 > 嵌入式培訓 > 嵌入式學習 > 講師博文 > 解析(xi)gets、fgtes、scanf三(san)者的(de)區別

解析gets、fgtes、scanf三者的區別(bie) 時間:2018-09-27      來源:未知

三者(zhe)都(dou)可以(yi)從標準輸(shu)入讀取字符,但是使用容易混淆

本文引用地址://fsbing.cn/emb/Column/7272.html

可以用下面程序進行驗(yan)證:

#include

#include

#define N 10

int main(int argc, char *argv[])

{

int i;

char buf[N];

for(i=0 ;i

buf[i] = 0x11;

}

while (1) {

gets(buf);

// scanf("%s", buf);

// fgets(buf, N, stdin);

printf("len = %d\n", strlen(buf));

for(i=0 ;i

printf("0x%x ", buf[i]);

}

printf("\n\n");

}

return 0;

}

gets是從標準輸入(ru)讀(du)入(ru)一行(xing)(xing),遇到換(huan)行(xing)(xing)符(fu)停止并且把換(huan)行(xing)(xing)符(fu)替換(huan)為'\0';

上(shang)面(mian)程序如果輸(shu)入'ab'并(bing)敲入回(hui)車結束,那么打印(yin)結果為(wei):

ab

len = 2

0x61 0x62 0x0 0x11 0x11 0x11 0x11 0x11 0x11 0x11

由此可(ke)見(jian)后的(de)換行被替換為(wei)'\0'字符,所(suo)以strlen輸出(chu)為(wei)2

fgets也是從標準輸入(ru)讀入(ru)一(yi)行,但是它會保留換(huan)行符(fu)然后(hou)在換(huan)行符(fu)后(hou)邊加(jia)入(ru)'\0';

上(shang)面(mian)程序使用fgets,輸入(ru)'ab'并敲入(ru)回車結(jie)束,那么打(da)印結(jie)果為:

ab

len = 3

 0x61 0x62 0xa 0x0 0x11 0x11 0x11 0x11 0x11 0x11

0xa是換(huan)(huan)行符(fu)的ascii碼值,由此可見后的換(huan)(huan)行被(bei)保留了(le),所(suo)以(yi)strlen輸出(chu)為(wei)3

scanf和gets很像,但(dan)是它以(yi)空(kong)格或者(zhe)換行為結(jie)束

例(li)如對于gets,輸入“a b”輸出如下:

a b

len = 3

0x61 0x20 0x62 0x0 0x11 0x11 0x11 0x11 0x11 0x11

但是對于scanf輸入如(ru)下:

a b

len = 1

0x61 0x0 0x11 0x11 0x11 0x11 0x11 0x11 0x11 0x11

len = 1

0x62 0x0 0x11 0x11 0x11 0x11 0x11 0x11 0x11 0x11

由此可見,scanf遇到第一(yi)個空格就已經結(jie)束了第一(yi)次讀取,因(yin)為緩沖區還有一(yi)個b,所以第二(er)次讀取立馬進(jin)行了。

上一篇:Meteor開發環境的搭建及簡單實用

下一篇:嵌入式Linux文件系統的介紹

熱點文(wen)章推薦
華清學員就業榜單
高薪學員經驗分享
熱點新(xin)聞(wen)推(tui)薦
前臺(tai)專線:010-82525158 企業培(pei)訓洽談專線:010-82525379 院校合作洽談專線:010-82525379 Copyright © 2004-2022 北京華清遠見科技集團有限公司 版權所有 ,,京公海網安備11010802025203號

回到頂部