国产成人精品三级麻豆,色综合天天综合高清网,亚洲精品夜夜夜,国产成人综合在线女婷五月99播放,色婷婷色综合激情国产日韩

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

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

三者都可以從標準輸入讀取字符,但是使用容易混淆

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

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

#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是從標準輸入讀入一行,遇到換行符停止并且把換行符替換為'\0';

上面程序如果輸入'ab'并敲入回車結束,那么打印結果為:

ab

len = 2

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

由此可見后的換行被替換為'\0'字符,所以strlen輸出為2

fgets也是從標準輸入讀入一行,但是它會保留換行符然后在換行符后邊加入'\0';

上面程序使用fgets,輸入'ab'并敲入回車結束,那么打印結果為:

ab

len = 3

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

0xa是換行符的ascii碼值,由此可見后的換行被保留了,所以strlen輸出為3

scanf和gets很像,但是它以空格或者換行為結束

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

a b

len = 3

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

但是對于scanf輸入如下:

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遇到第一個空格就已經(jīng)結束了第一次讀取,因為緩沖區(qū)還有一個b,所以第二次讀取立馬進行了。

上一篇:Meteor開發(fā)環(huán)境的搭建及簡單實用

下一篇:嵌入式Linux文件系統(tǒng)的介紹

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

回到頂部