@溪流
>>那應該告訴我讀了 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 ] );
}
回復 更多評論