@溪流
>>那應(yīng)該告訴我讀了 sizeof(T)/2 個字節(jié),而不是告訴我讀了 0 個 T 啊
你已經(jīng)形成思維定勢了:
1. fread應(yīng)該設(shè)計成什么樣子, 你心中已經(jīng)有答案
2. fread如果設(shè)計成那樣子我會怎么用, 你已經(jīng)習(xí)慣這么用
3. 應(yīng)為我習(xí)慣這么用, 所以fread設(shè)計成這樣就是不對的
這是循環(huán)論證, 說明不了任何問題。
現(xiàn)在你要拋棄你的習(xí)慣:
習(xí)慣1: 不僅僅用來讀取字節(jié)流, 還可以直接讀取二進制格式文件
習(xí)慣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 ] );
}
回復(fù) 更多評論