@溪流
>>那應(yīng)該告訴我讀了 sizeof(T)/2 個(gè)字節(jié),而不是告訴我讀了 0 個(gè) T 啊
你已經(jīng)形成思維定勢(shì)了:
1. fread應(yīng)該設(shè)計(jì)成什么樣子, 你心中已經(jīng)有答案
2. fread如果設(shè)計(jì)成那樣子我會(huì)怎么用, 你已經(jīng)習(xí)慣這么用
3. 應(yīng)為我習(xí)慣這么用, 所以fread設(shè)計(jì)成這樣就是不對(duì)的
這是循環(huán)論證, 說(shuō)明不了任何問(wèn)題。
現(xiàn)在你要拋棄你的習(xí)慣:
習(xí)慣1: 不僅僅用來(lái)讀取字節(jié)流, 還可以直接讀取二進(jìn)制格式文件
習(xí)慣2: 有返回值檢測(cè)
然后比較兩段代碼, 看哪段寫(xiě)著順手:
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ù) 更多評(píng)論