爲fread()
的語法是
size_t fread(void *ptr, size_t size, size_t nmemb, FILE * stream);
這意味着,
功能fread()
讀取數據的nmemb
元素,每個size
字節長,從流通過stream
指出,存儲他們在ptr
給出的位置。
因此,讀取的總字節數將是nmemb * size
。
現在,說
成功
,FREAD()和fwrite()返回的項目數讀取或寫入。這個數目等於僅傳輸的字節數時大小爲1
這意味着,返回值將等於nmemb
當size
是1.
Logic是一樣的,在fwrite()
也如此。
編輯
例如,一個完全成功調用fread()
像
fread(readbuf, sizeof(int), 5 , stdin);
將返回5
,同時它會讀取sizeof(int) * 5
字節。如果我們假設sizeof(int)
是4
,那麼讀取的總字節數將是5 * 4
或20
。正如你所看到的,在這裏,讀取或寫入的項目數是不等於到轉移的字節數。
OTOH,另一個完全成功調用fread()
像
fread(readbuf, sizeof(char), 5 , stdin);
也將返回5
,同時它會讀取sizeof(char) * 5
個字節,即5
字節。在這種情況下,由於sizeof(char)
是1
,所以在這裏讀取或寫入的項目數是等於到轉換的字節數。即,5
。
'FREAD()''讀取N * K'字節,其中'N'是每個元素中的字節數,總共將讀取「K」個元素。理想情況下,如果沒有錯誤發生,將返回「K」。如果出現錯誤或文件結束條件,則可能會讀取少於'K'個元素,在這種情況下,將返回小於'K'的數字。 – 2015-02-08 19:24:52
相關:http://stackoverflow.com/q/8589425/827263 – 2015-02-08 20:30:00