2 xy83138 xy83138 于 2016.04.18 08:19 提问

C++中一个关于_bufsize的难题?

最近在研究I/O缓冲,发现了一个问题,在网上搜了很久都没有答案。
先上代码:

 #include<iostream>
#include<stdio.h>
using namespace std;
int main(){
    printf("stdout buffer total size: %d\n",stdout->_bufsiz);
    printf("stdout buffer used size: %d\n",stdout->_cnt);
    cout<<"asdf";
    printf("stdout buffer total size: %d\n",stdout->_bufsiz);
    printf("stdout buffer used size: %d\n",stdout->_cnt);
    return 0;
}

问题:
1、为什么stdout->_bufsize会为0呢?不是说是4096吗??
2、cout<<"asdf",这行代码没有endl,按道理是不会强制刷新输出缓冲区的,但是为什么在第二次打印stdout->_cnt的时候,仍然为0呢?我知道很多时候,因为系统对缓冲区的自我检查,导致有没有endl,基本上效果是一样的,但是我就是想知道有没有一段代码可以证明有enld和没有endl的区别?太想知道了!!
谢谢各路大神帮忙!

3个回答

qq423399099
qq423399099   Ds   Rxr 2016.04.19 08:48
已采纳

用setbuf更改缓冲的类型试试

 char *a = (char *)malloc(50);
    setbuf(stdout, a);
    int i = 1;
    while(i++){
        cout << 1;
        if(i % 10 == 0)
            fflush(stdout);
        Sleep(100);
    }
CSDNXIAON
CSDNXIAON   2016.04.18 08:32

一个难题
MySQL中的一个难题
----------------------同志你好,我是CSDN问答机器人小N,奉组织之命为你提供参考答案,编程尚未成功,同志仍需努力!

fuchouzhe
fuchouzhe   2016.04.20 23:24

答案是你的速度太慢了,stdout的对象为命令行时很快就执行完成了。

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!