基础知识 | 每日一练(117)

基础知识练习
读者:怎样同时向两个地方输出, 如同时输出到屏幕和文件?

小林:直接做不到这点。但是你可以写出你自己的 printf 变体, 把所有的内容都输出两次。

例子:

#include <stdio.h>

#include <stdarg.h>

void f2printf(FILE *fp1, FILE *fp2, char *fmt, …)

{

va_list argp;

va_start(argp, fmt); vfprintf(fp1, fmt, argp); va_end(argp);

va_start(argp, fmt); vfprintf(fp2, fmt, argp); va_end(argp);

}

这里的 f2printf() 就跟 fprintf() 一样, 除了它接受两个文件指针并同时输出到两个文件。

读者:怎样正确的读取二进制文件?我有时看到 0x0a 和 0x0d 混淆了,而且如果数据中包含 0x1a 的话, 我好像会提前遇到 EOF。

小林:读取二进制数据文件的时候你应该用 “rb” 调用 fopen(), 确保不会发生文本文件的解释。类似的, 写二进制文件时, 使用 “wb”。注意文本/二进制区别只是发生在文件打开时: 一旦文件打开之后, 在其上调用何种 I/O 函数无关紧要。

正文完