printf函数与缓冲区

printf函数是一个行缓冲函数,先将内容写到缓冲区,满足一定条件后,才会将内容写入对应的文件或流中。

基本条件如下:

.缓冲区填满
.写入的字符中有‘\n’ '\r'
.调用fflush或stdout手动刷新缓冲区
.调用scanf等要从缓冲区中读取数据时,也会将缓冲区内的数据刷新
5.程序结束时

有以下示例1验证:

 #include <stdio.h>
#include <stdlib.h> /*argc:命令行输入参数个数,argv:命令行参数
*argv为字符指针数组,argv[i]为指向第i个命令行参数内容的指针
*/
int main(int argc, char **argv){ 
int i;
char a='a';
if(argc != ) //命令行参数为2,否则出错
{
printf("Usage:%s Number\n",argv[]); 
return ;
} for(i=;i<atoi(argv[]);i++) //atoi:字符转化为整数
{
printf("%c",a);
} while(); //让程序一直运行
}

运行结果:

说明linux下,printf缓冲区大小为1024字节。while(1)使程序一直运行,当缓冲区未满时,不会输出打印。

示例2:

 #include <stdio.h>

 int main()
{
int i;
for(i=; i<; i++)
{
printf("a");
fflush(stdout); //参数为文件指针
}
while();
return ;
}

没进行流刷新之前

流刷新fflush之后

printf函数与缓冲区的更多相关文章

  1. Linux Linux下特殊的printf函数和fputs函数

    Linux下,printf函数必须以'\n'结尾才会立刻输出到屏幕,如果没有'\n'直到输出缓冲区满了以后才会打印到屏幕上(敲击换行也算),如果需要不换行的输出,一般可以使用write函数代替.'\n ...

  2. [转]printf 函数实现的深入剖析

    研究printf的实现,首先来看看printf函数的函数体 int printf(const char *fmt, ...) { int i; char buf[256];          va_l ...

  3. 【转载】sprintf()函数 和 printf()函数

    sprintf()函数 和 printf()函数 参考:C++ 中的sprintf和snprintf 函数的区别 - CSDN博客  http://blog.csdn.net/youbingchen/ ...

  4. scanf函数读取缓冲区数据的问题

    标准I\O的缓冲类型 标准I\O根据不同的应用需求,提供了全缓冲.行缓冲.无缓冲三种缓冲方式. 全缓冲:只有当划定的缓冲区被填满或者数据读取至末尾时,才开始执行I\O操作(执行系统提供的read\wr ...

  5. 【C/C++】scanf,printf 函数

    摘自http://www.cplusplus.com 1. scanf 函数 int scanf ( const char * format, ... ); Parameters format C s ...

  6. linux中fflush函数和printf函数 【转】

    本文转载自:http://blog.chinaunix.net/uid-30058258-id-5029847.html printf是一个行缓冲函数printf函数是标准函数,最终会调用到系统调用函 ...

  7. linux下printf函数为什么不加\n就不能输出相关的内容 ?

    转载请注明出处:http://blog.csdn.net/qq_26093511/article/details/53255970 原因:  输出缓冲区的问题. unix上标准输入输出都是带有缓存的, ...

  8. 可变参数列表与printf()函数的实现

    问题 当我们刚开始学习C语言的时候,就接触到printf()函数,可是当时"道行"不深或许不够细心留意,又或者我们理所当然地认为库函数规定这样就是这样,没有发现这个函数与普通的函数 ...

  9. printf函数

    printf函数的格式及含义 d                    以十进制带符号的形式输出整数(对正数不输出符号) o                    以八进制无符号的形式输出整数(不输出 ...

随机推荐

  1. windows系统下MySQL中遇到1045问题

    报错内容为"1045    Access denied for user 'root'@'localhost' (using password:YES)",对应的原因是密码错误,如 ...

  2. Python3.5-20190513-廖老师-自我笔记-函数式编程

    把复杂的任务拆成各个小的函数,通过函数的调用来完成任务.这就是面向过程编程. 高阶函数:就是让函数的参数能够接收别的函数.把函数作为参数传入到另一个函数. 函数名也是变量.和变量用法一样的,指向一个函 ...

  3. Administrator 被禁用

    Administrator 被禁用 问题: 重装系统后出现输入用户名和密码的情况,原因是Administrator被禁用. 解决方法: 1.开机后shift+重启 –>选择疑难解答 --> ...

  4. pycharm查找替换快捷键

    查找:CTRL + F 替换:CTRL + R 如果想删除,替换那一栏不填就可以了

  5. 【多线程】synchronized 和ReentrantLock

    1. 锁的实现 synchronized 是 JVM 实现的,而 ReentrantLock 是 JDK 实现的. 2. 性能 新版本 Java 对 synchronized 进行了很多优化,例如自旋 ...

  6. px4的CMakelists.txt阅读

    ############################################################################ # # Copyright (c) PX4 D ...

  7. POJ 1655 Balancing Act (树状dp入门)

    Description Consider a tree T with N (1 <= N <= 20,000) nodes numbered 1...N. Deleting any nod ...

  8. 【LeetCode 34】在排序数组中查找元素的第一个和最后一个位置

    题目链接 [题解] 二分某个数的上下界. 其实这个方法并不难. 只要你想清楚了二分最后一次执行的位置在什么地方就不难了. [代码] class Solution { public: vector< ...

  9. paper 140:TLD视觉跟踪算法(超棒)

    我是看了这样的一个视频:http://www.56.com/u83/v_NTk3Mzc1NTI.html 然后在准备针对TLD视觉跟踪算法来个小的总结. 以下博文转自:http://blog.csdn ...

  10. 探索Redis设计与实现2:Redis内部数据结构详解——dict

    本文转自互联网 本系列文章将整理到我在GitHub上的<Java面试指南>仓库,更多精彩内容请到我的仓库里查看 https://github.com/h2pl/Java-Tutorial ...