最近执行的一份代码,使用printf的时候,忘记加\n了, 结果一直没打印。 反复查看程序配置与逻辑,都没问题。浪费了半天时间,最终发现是踩进了坑。。,特此记录一下该情况。
下面的代码,如果不加 printf("\n")
或fflush(stdout)
不会显示printf的结果。 或者修改为 printf("%s\n", str1)
才会显示打印结果。
还可以把 while(1);
去掉,程序执行完成也可以刷新printf的缓冲区,把结果打印出来。
这与printf的缓冲区有关系。
#include <stdio.h>
int main(int argc, char **argv)
{
char *str1 = "str1 printing...";
char *str2 = "str2 printing...";
printf("%s", str1);
printf("%s", str2);
// printf("\n");
// fflush(stdout);
while(1);
return 0;
}
缓冲区刷新的条件:
1.进程结束。
2.遇到\n。
3.缓冲区满。 printf函数的缓冲区大小为1024个字节,当超出缓冲区的大小,缓冲区会被刷新,将会打印出结果。
4.手动刷新缓冲区fflush(stdout)。
5.调用exit(0);但是还可以调用_exit(0),不刷新缓冲区。