@溪流
>>那应该告诉我读了 sizeof(T)/2 个字节,而不是告诉我读了 0 个 T 啊
你已经形成思维定势了:
1. fread应该设计成什么样子, 你心中已经有答案
2. fread如果设计成那样子我会怎么用, 你已经习惯这么用
3. 应为我习惯这么用, 所以fread设计成这样就是不对的
这是循环论证, 说明不了任何问题。
现在你要抛弃你的习惯:
习惯1: 不仅仅用来读取字节流, 还可以直接读取二进制格式文件
习惯2: 有返回值检测
然后比较两段代码, 看哪段写着顺手:
void f(T* buf, size_t buf_size, FILE* stream)
{
size_t count = fread(buf, sizeof *buf, buf_size, stream);
for (size_t i=0; i<count; ++i)
process(buf[i ] );
}
void g(T* buf, size_t buf_size, FILE* stream)
{
size_t bytes = Read(buf, sizeof(T) * buf_size, stream);
for (size_t i=0; i< bytes/ sizoef(T); ++i)
process( buf[i ] );
}
回复 更多评论