【发布时间】:2018-03-24 10:48:01
【问题描述】:
函数setvbuf()可用于使流无缓冲:
#include <stdio.h>
int setvbuf(FILE *stream, char *buf, int mode, size_t size);
mode作为_IONBF传递时,size参数的值是什么意思?会分配缓冲区吗?
可以通过
0吗?
【问题讨论】:
-
您必须查看 CRT 的源代码。但是可以安全地假设 buffer 和 size 的值是不相关的,当您传递 buffer=NULL 并且永远不会使用非 NULL 缓冲区时不会发生分配。图书馆作者确实应用了最小意外原则。
-
显然它应该在这种情况下被忽略,显然 0 是适当的传递值。 (也就是说,如果你传递了 0 以外的任何数字,它仍然会被忽略,并且不会分配任何内容,但是调用看起来会非常误导。)但是我刚刚看过的不同的两个手册页不会出来并明确地说出来。也许您可能想添加
language-lawyer标签?
标签: c file-io language-lawyer c-standard-library