当前位置:首页 > 嵌入式培训 > 嵌入式学习 > 讲师博文 > 解析gets、fgtes、scanf三者的区别

解析gets、fgtes、scanf三者的区别 时间:2018-09-27      来源:未知

三者都可以从标准输入读取字符,但是使用容易混淆

本文引用地址://emb.hqyj.com/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号

回到顶部