暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

深入理解printf

嵌入式软件开发交流 2020-02-04
718


后台回复【微信】可以加我,进技术交流群





前言




    首先我们先从一个例子开始讲起,先给出代码如下:

#include <stdio.h>


int main()
{
printf("first\n");
sleep(1); //延迟1秒
printf("second\n");
return 0;
}
复制

上面的例子很简单, 输出的结果为:

first

second

两个输出之间间隔一秒


OK,接下来,我们作一下修改

#include <stdio.h>


int main()
{
printf("first"); /*去掉转义字符'\n'*/
sleep(1);
printf("second\n");
return 0;
}
复制

我们去掉了第一个printf后面得“\n” 。输出结果为:

firstsecond

但是输出却是延迟一秒之后才将firstsecond一起输出


当我们去掉转义字符‘\n’, 延迟函数sleep不再在语句间延迟,而是变成延迟整个程序。为什么呢?这就要我们深入来理解printf了。





深入理解printf




printf是一个行缓冲函数,输出的内容会先写到缓冲区,满足一定的条件后,才会将缓冲区内容输出到对应文件中,如下几个条件可以刷新缓冲区:


1. 缓冲区填满,缓冲区大小为1024个字节。

2. 写入的字符中有‘\n’ , ‘\r’。

3. 调用fflush手动刷新缓冲区。

4. 调用scanf要从缓冲区中读取数据时,也会将缓冲区内的数据刷新。

5. 调用printf函数的进程或线程结束会调用fflush函数

6.调用exit(0)

7. 调用return

注意: 调用_exit(0),不刷新缓冲区。


接下来我们再修改一下程序

include <stdio.h>


int main()
{
printf("first");
fflush(stdout); //强制刷新缓存,输出显示
sleep(1);
printf("second\n");


return 0;
}
复制

这个时候的效果就是先输出first,然后1秒之后再输出second。




精品文章:

Linux文件系统

嵌入式开发资料汇总

嵌入式到底该怎么学

C语言为什么不能函数重载


长按识别图中二维码关注


文章转载自嵌入式软件开发交流,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论