- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我使用 setbuf 将标准输出重定向到字符缓冲区但是当我只想将新数据写入标准输出时,我得到了一些副作用
如以下代码所示:
#define bufSize 100
int main()
{
char buf[bufSize];
setbuf(stdout, buf);
printf("123"); //123 is written to the buffer
setbuf(stdout,NULL); //123 is written to the stdout(unwanted side effect)
printf("456"); //123456 appears in the stdout
}
我该如何解决这个问题?
关于此的其他问题 - 此代码是否适用于 unix/linux/mac os?
谁能提出重定向的解决方案?
最佳答案
setbuf()
函数不会将输出重定向到缓冲区。它只是告诉标准 I/O 库“使用这个缓冲区;不要自己分配”。
您还应该在每个打开的流中使用一次 setbuf()
(在它打开之后立即并且在对它进行任何其他操作之前)并且之后不要管它。如果你多次使用它,你会进入未定义的行为 - 你看到的是可以接受的,因为所需的行为是未定义的。
C99 标准说:
§7.19.5.5 The setbuf function
Except that it returns no value, the setbuf function is equivalent to the setvbuf function invoked with the values _IOFBF for mode and BUFSIZ for size, or (if buf is a null pointer), with the value _IONBF for mode.
§7.19.5.6 The setvbuf function
The setvbuf function may be used only after the stream pointed to by stream has been associated with an open file and before any other operation (other than an unsuccessful call to setvbuf) is performed on the stream.
关于c - setbuf重定向,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7085257/
来自 Ubuntu 上的 man setbuf: You must make sure that the space that buf points to still exists by the ti
我正在开发一个 basic_streambuf 来处理从/到 Winsock 套接字的读取和写入。就像 basic_filebuf 一样,我在内部使用 std::codecvt 对象将从底层套接字读取
我的问题如下:Martin York this 中的 claim , this , 和 this回答可以使用 basic_stringbuf::pubsetbuf 像这样从一段内存中读取 string
这是我在 Stackoverflow 上的第一步! 因此,我尝试使用 setbuf() 将 stdout 重定向到 char buffer[BUFSIZ]。当我使用 printf() 时,它工作得很好
程序 1: #include void main() { printf("Hello\n"); } 输出: $strace ./a.out
再一次,我的老师无法回答我的问题。我知道谁能... 所以,我从来没有真正学过 C。在 C++ 中,显然,我会一直使用 cout 语句。在最近的作业中,我的老师告诉我们一定要把 setbuf( stdo
setbuf 函数什么时候有用(NULL 值除外)? 我尝试发明这些例子,但我还是做不到。 我了解 setvbuf 如何发挥作用,但我不了解 setbuf。 最佳答案 基本上,setvbuf 是一个较
将VS2005中的“setbuf”移植到VS2008需要做哪些改动? 我必须将 VS2005 中的项目修改为 VS2008 才能构建它。下面是需要在VS2008中编译的代码行。 std::ifstr
如果我想使用标识符NULL怎么办?在 gdb的调用语句? 是因为我没有在 gdb 中包含 stdio.h 吗? 我试过:call #include 但这似乎不起作用。 最佳答案 NULL是一个 C 定
Linux seq_file 接口(interface)中是否有一个setbuf(stdout, NULL) 等效函数? 据我所知,通过 setbuf(stdout, NULL),printf 函数立
我是一名优秀的程序员,十分优秀!