缓冲输出与内存分配

程序输出有两种方式:一种是即时处理方式,另一种是先暂时存起来,然后再大块写入的方

式,前者往往造成较高的系统负担。因此,C语言实现通常都允许程序员进行实际的写操作

之前控制产生的输出数据量。

setbufstdout, buf;

此语句通知输入输出库,所有写入到stdout的输出都应该使用buf作为输出缓冲区,直到buf

缓冲区被填满或者程序员直接调用fflush(对于由写操作打开的文件,调用fflush将导致输

出缓冲区的内容被实际的写入该文件),缓冲区的大小有<stdio.h>中的BUFSIZ定义。

 

#include <stdio.h>

 

//char buf[BUFSIZ];

 

void main()

{

     int c;

    

     static char buf[BUFSIZ];

 

     setbuf(stdout, buf);

    

     while((c = getchar()) !=  EOF)

     {

              putchar(c);

     }

 

     printf("/n");

}

 

Buf缓冲区最后一次被清空是在什么时候?

答案是在main函数结束之后,作为程序交回控制给操作系统之前C运行时库必须进行的

理工作的一部分。局部变量的Buf字符数组会在main结束时释放。有两种方法可保证buf

被清空前不被释放:让缓冲区成为静态数组(或全局数组)、动态分配缓冲区,如:

setbuf(stdout, malloc(BUFSIZ));

不必检查malloc函数调用是否成功,因为setbuf函数的第二个参数取值可以为NULL,此

时标准输出不需要进行缓冲,这样程序仍然能够工作,只不过速度比较慢

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值