首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

printf()缓冲区没满,就不会打印到屏幕下。这句如何理解

2013-01-02 
printf()缓冲区没满,就不会打印到屏幕上。这句怎么理解?书上说,缓冲区满的时候会刷新并且将内容打印到屏幕;

printf()缓冲区没满,就不会打印到屏幕上。这句怎么理解?
书上说,缓冲区满的时候会刷新并且将内容打印到屏幕;如果没满的话,就不会打印到屏幕上。我单步调试下面的程序,发现一执行一条printf就直接打印内容,跟书上讲的不一样。
这是为什么呢?

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
    printf("1");
    printf("2");
    printf("3"); 
    printf("4"); 
    return 0;
}

有人说,在windows中就不行,在linux中就可以。不知道这个说法对不对。
我没有linux系统,你们谁在linux上试过的吗?结果怎么样?

或者,上面那个试法有什么问题吗?
------------------------------------------
PS:新人,请多指教。谢谢!
[解决办法]
LINUX上是在最后一起打印的,printf是在手动刷新缓冲区和缓冲区满,或遇到换行'\n',或程序正常结束时才会打印
[解决办法]
用printf()输出时是先输出到缓冲区,然后再从缓冲区送到屏幕上。

1. 使用fflush(stdout)强制刷新。
2.缓冲区已满。
3.scanf()要在缓冲区里取数据时会先将缓冲区刷新。
4.\n,\r进入缓冲区时。
5.线程结束的时候,如果该线程里也有printf(....);
6. 程序结束时。
[解决办法]
linux 程序退出才会打印
[解决办法]
跟了一下,看到vs文件printf.c中,缓存值就是1.
[解决办法]
上面我说错了。windows下缓存看到是4096.
跟了下---是用vs跟的。
应该是不同的操作系统导致的。windows有设置flag,估计这里就将要输出到屏幕上了
printf()缓冲区没满,就不会打印到屏幕下。这句如何理解

[解决办法]

引用:
上面我说错了。windows下缓存看到是4096.
跟了下---是用vs跟的。
应该是不同的操作系统导致的。windows有设置flag,估计这里就将要输出到屏幕上了

对的,代码如下:


        if (flag) {

                if (stream->_flag & _IOFLRTN) {

                        /* Flush the stream and tear down temp buffering. */
                        _flush(stream);
                        stream->_flag &= ~(_IOYOURBUF 
[解决办法]
 _IOFLRTN);
                        stream->_bufsiz = 0;
                        stream->_base = stream->_ptr = NULL;
                }

_flag设置了_IOFLRTN就会立即输出,不用等到其他条件满足。
[解决办法]
引用:
引用:pc 你要想见到这个效果比较难...
嵌入式设备经常遇到..

是因为PC和嵌入式设备上对printf()的实现不同吗?


不是不同,是性能的差别,嵌入式设备的缓冲区通常远小于pc,可能刚打进去一点,就可能被别的玩意儿盖掉了,所以嵌入式做开发带流的函数进行i/o的时候通常一次i/o马上跟fflush()
[解决办法]
引用:
引用:pc 你要想见到这个效果比较难...


嵌入式设备经常遇到..

是因为PC和嵌入式设备上对printf()的实现不同吗?



你可以百度一下fflush()这个函数帮助你理解这句话.
另外pc上实现这个玩意儿要到进程操作这部分的时候你会遇到的.

热点排行