printf函数与缓冲区
printf函数是一个行缓冲函数,先将内容写到缓冲区,满足一定条件后,才会将内容写入对应的文件或流中。
基本条件如下:
1.缓冲区填满 2.写入的字符中有‘\n’ '\r' 3.调用fflush或stdout手动刷新缓冲区 4.调用scanf等要从缓冲区中读取数据时,也会将缓冲区内的数据刷新5.程序结束时
有以下示例1验证:
1 #include <stdio.h> 2 #include <stdlib.h> 3 4 /*argc:命令行输入参数个数,argv:命令行参数 5 *argv为字符指针数组,argv[i]为指向第i个命令行参数内容的指针 6 */ 7 int main(int argc, char **argv){ 8 int i; 9 char a='a'; 10 if(argc != 2) //命令行参数为2,否则出错 11 { 12 printf("Usage:%s Number\n",argv[0]); 13 return 0; 14 } 15 16 for(i=0;i<atoi(argv[1]);i++) //atoi:字符转化为整数 17 { 18 printf("%c",a); 19 } 20 21 while(1); //让程序一直运行 22 }
运行结果:
说明linux下,printf缓冲区大小为1024字节。while(1)使程序一直运行,当缓冲区未满时,不会输出打印。
示例2:
1 #include <stdio.h> 2 3 int main() 4 { 5 int i; 6 for(i=0; i<10; i++) 7 { 8 printf("a"); 9 fflush(stdout); //参数为文件指针 10 } 11 while(1); 12 return 0; 13 }
没进行流刷新之前
流刷新fflush之后
来源:https://www.cnblogs.com/y4247464/p/12024742.html