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

问题描述

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

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

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

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

解决方案

用setbuf更改缓冲的类型试试

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

解决方案二:

一个难题
MySQL中的一个难题

解决方案三:

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

时间: 2024-08-22 15:07:52

iostream-C++中一个关于_bufsize的难题?的相关文章

使用iostream和iostream.h中遇到的编程问题

问题描述 使用iostream和iostream.h中遇到的编程问题 运行下面两个程序为什么它的运行结果会不同,求大神解决 #include #include #include #include void gotoxy(int x, int y)//定位光标 { COORD pos; pos.X = x * 2; pos.Y = y; SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), pos); } int main(void)

gdi+-GDI+中一个窗体的CDC* pDC实例化两个Graphics对象问题

问题描述 GDI+中一个窗体的CDC* pDC实例化两个Graphics对象问题 代码如下:void CMyCtrl::Draw(CDC* pDC CRect rc){ Pen pen(Color(255 255 255 255)(float)1.5); SolidBrush solidbrush(Color(255 213 213 213)); pen.SetDashStyle((DashStyle)DashStyleSolid); Graphics Test(pDC->m_hDC); Tes

SQLServer中一个多用户自动生成编号的过程

server|sqlserver|过程 SQLServer中一个多用户自动生成编号的过程 if not exists (select * from dbo.sysobjects where id = object_id(N'[IndexTable]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)create table IndexTable(Ex char(20), num integer) go create procedure SetIndex @

PHP中一个控制字符串输出的函数

// php 中 一个控制字符串输出的函数(中英文),每行显示多少字数,避免英文的影响 // $str 字符串 // $len 每行显示的字数(汉字×2) function rep($str,$len) {       $strlen=strlen($str);       $i=0;     $finstr="";     $pos=0;          while($i<$strlen)       {         $s1=substr($str,$i,1);     

JAVA 中一个字符串s ,有36位取前24位,代码怎么写?

问题描述 JAVA 中一个字符串s ,有36位取前24位,代码怎么写? 求解..JAVA 中 一个字符串s ,有36位取前24位,代码怎么写? 解决方案 s.substring(0 24) 解决方案二: s = s.subString(s 24); 解决方案三: s.substring(024); substring()方法包头不包尾索引从0开始 解决方案四: s = s.subString(024); substring()方法包头不包尾索引从0开始 解决方案五: s = s.subStrin

mfc-MFC中一个关于异常的问题

问题描述 MFC中一个关于异常的问题 在VS中,为什么会让我这样写CATCH,中间的逗号是什么意思,没有的话就出错,说让我输入")" CATCH(CFileException,e) 解决方案 http://blog.chinaunix.net/uid-21411227-id-1826958.html 这里有详细一些的介绍,以及宏的定义. 注意区分作为C++语法的try catch和MFC的宏TRY CATCH. 解决方案二: CATCH是MFC中的一个宏,在MFC诞生的时候,C++还很

java中一个商品列表集合简单问题

问题描述 java中一个商品列表集合简单问题 java中一个商品列表集合简单问题 java中一个商品列表集合简单问题 肯德可以理解为对象,java一切都是对象 那么可以理解为一个类吗可以理解为一个数组吗,可以理解为一种数据泪腺吗 解决方案 对象集合类是类,但不能说对象集合的对象是一个类,对象就是类的实例,和类是不等的.数组是指基本数据类型集合.比如int [] arrs = new int[]{},而List 等类创建的对象集只能称为集合.不能理解为数据类型.数据类型只有基本类型和引用类型.

java 某个类的几个对象,这些对象调用类中一个函数,是各自拥有自己的函数代码还是使用同一段代码?

问题描述 1.java 某个类的几个对象,这些对象调用类中一个函数(普通的函数),是各自拥有自己的函数代码还是使用同一段代码?2.java 继承中,子类从父类得到一些普通函数,这些函数的代码,是子类自己独自拥有一份还是和父类使用同一段函数代码.3.第一次发帖,积分什么的不会搞,貌似自己也没有积分,呵呵,大家包涵! 解决方案 引用1.java 某个类的几个对象,这些对象调用类中一个函数(普通的函数),是各自拥有自己的函数代码还是使用同一段代码?这几个对象调用的当然是同一段代码了.jvm中有一个ja

ssh框架 application.xml中一个错误说我没有设着setter

问题描述 ssh框架 application.xml中一个错误说我没有设着setter 这是我的xml文件一部分 userdailService的get/set都写好了啊 下面是Useraction代码 package com.holy.action; import javax.servlet.http.HttpSession; import com.holy.service.*; import com.holy.modle.*; import org.apache.struts2.Servle