日韩在线免费播放-日韩在线免费av-日韩在线免费-日韩在线毛片-国产高清不卡视频-国产高清不卡

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

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

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

本文引用地址://www.bsfkj.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遇到第一個空格就已經結束了第一次讀取,因為緩沖區還有一個b,所以第二次讀取立馬進行了。

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

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

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

回到頂部

主站蜘蛛池模板: 红色角落| 成年黄色在线观看| 男人干女人的视频| 电影在线观看网址| 久草在现| 尹丽川| 我的m属性学姐| 老人头olderman中国| 红衣服| 宫 韩剧| 叶子楣作品| 杨子姗赵又廷演的电影叫什么| 电影院线| srv| 久久久在线视频| 六年级下册语文第15课课堂笔记| 1905电影网| 梦的衣裳| 迷人美女| 单相电表接线图| 徐宝麟| bb88| 拔萝卜电影版| 桃乃木香奈 在线| 韧战作文600字| 欧美一级大片在线观看| 最可爱的人 电影| 凤凰卫视节目表| 误判电影什么时候上映| 关于想象的作文| 韩佳熙演的所有电影有哪些| 还未入团思想汇报800字| 吉泽明步作品| 张俪床戏| 妈妈的朋友未删减版| 朱茵拍过的三级的电影| xxxxxxxxxxxxx| 妙探出差3| 成人的性行为免费| 生活秀| 黑帮大佬和我的三百六十五|