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币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
【郑轻】[1775]和尚特烦恼1——是不是素数
又是好几天没上传博客 当时也是被那一个曾经没AC的题目搞得心累了 想一想 因为有些题目是当时的比赛未完成的 所以还是先把这些已经AC的代码贴上来 然后安心写博客吧
九度OJ 1204:农夫、羊、菜和狼的故事 (遍历、BFS)
时间限制:1 秒 内存限制:32 兆 特殊判题:是 提交:744 解决:502 题目描述: 有一个农夫带一只羊、一筐菜和一只狼过河. 果没有农夫看管,则狼要吃羊,羊要吃菜. 但是船很小,只够农夫带一样东西过河。 问农夫该如何解此难题? 输入: 题目没有任何输入。 输出: 题目可能有种解决方法,求出步骤最少的解决方法,
小学奥数题C语言解法
朋友给我发了一个小学的奥数题,尝试解了一会儿没有找到方法,于是编辑了一个小程序解决了 上面的是题目 下面的是实现的代码,仅做参考 #include #ifdef __cplusplus extern "C"{ #endif int math(void); int main(void) { math(); return 0; }
售货员的难题(luogu1171)
售货员难题(luogu1171)深搜+剪枝
c语言题目集合
转自:http://blog.csdn.NET/oqqhutu12345678/article/details/69524383 1. 用预处理指令#define 声明一个常数,用以表明1年中有多少秒(忽略闰年问题) #define SECONDS_PER_YEAR (60 * 60 * 24 * 365)UL  2. 写一个“标准”宏MIN,这个宏输入两个参
小泉的难题 (sdut oj)
小泉的难题 Time Limit: 1000MS Memory Limit: 65536KB Problem Description 机械实验班有个同学叫小泉,有一天数学老师给小泉布置了一道个人作业,给小泉M(M Input 输入包括M+1行,第一行是两个正整数M、N;M表示总共多少组数据,下面M行每行包含N个正整数。(输入数据之间
【售货员的难题】
直接上搜索dfs#include<cstdio> #include<iostream> #include<ctime> using namespace std; #define N 20 int n,a[N][N],ans=0x7ffffff; bool vis[N];int tot; void dfs(int u,int res) { if(!res) { ans=
和尚特烦恼2
题目描述和尚解决了上一次的难题之后。又碰到了新的难题。这次也是关于素数的。一位施主首先把素数编号。最小的素数2编号为1,然后依次增加。施主要要求和尚迅速回答出对应编号的素数。输入输入数据有多组,输入数据有多组,每组数据首先输入一个整数n(n&amp;lt;100). 然后有n个正整数m(m&amp;lt;10000).输出对于每个正整数编号,输出对应的素数每个输出占一行样例输入3 1 2 3 样例输出2 3 5 ...
21世纪有关计算机领域的十二个重大难题
21世纪有关计算机领域的十二个重大难题 时间 2016-11-27 18:20:16  我爱计算机 原文  http://www.52cs.org/?p=1375 主题 安全技术 设计 作者:高庆狮,中科院院士 声明:本文发表在 《科学》 2005年04期 自从1946年第一台电子数字计算机诞生以来,每隔3~7年,计算机的速度、性能和可靠性可提高十倍,价格和体积
从0开始<十三>:getint()函数(类似于scanf函数)以及库函数strncpy、strncat及strncmp函数的实现
程序一:编写getint(int *pn)函数 #include #include #define BUFSIZE 100 char buf[BUFSIZE]; int bufp = 0; /*buf中下一个空闲位置*/ int getch(void); void ungetch(int); int getint(int *pn); int main(void) { int i,ar