古代的剑客们与
对手相逢时,无
论对手多么强大,
明知不敌,也要亮出自己的剑!
读者:怎样正确的读取二进制文件?我有时看到 0x0a 和 0x0d 混淆了,而且如果数据中包含 0x1a 的话, 我好像会提前遇到 EOF。
小林:读取二进制数据文件的时候你应该用 “rb” 调用 fopen(), 确保不会发生文本文件的解释。类似的, 写二进制文件时, 使用 “wb”。注意文本/二进制区别只是发生在文件打开时: 一旦文件打开之后, 在其上调用何种 I/O 函数无关紧要。
读者:怎样同时向两个地方输出, 如同时输出到屏幕和文件?
小林:直接做不到这点。但是你可以写出你自己的 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() 一样, 除了它接受两个文件指针并同时输出到两个文件。
有时候,正是那些意想不到之人,成就了无人能成之事。
——图灵
正文完