如果您的fread
行不符合您的預期,我會查看fileLength
設置的任何值。如果它的字節數多於可讀數,則fread
將返回零。你需要記住
的一件事是,項目讀fread()
退貨數量,而不是字節(我的重點)的數量:
size_t fread (void *ptr, size_t size, size_t nmemb, FILE *stream);
成功時, fread()
返回數項閱讀。這個數目等於字節數轉移僅當大小爲1
所以在這兩個之間的差:
size_t n = fread (buffer, s, 1, fp);
size_t n = fread (buffer, 1, s, fp);
第一正在讀取到一個元件尺寸爲s
,因此只會返回零或一個。第二個是讀取尺寸爲1的s
元素,因此可返回值爲0..s
(含)。
的後者是你想要的,如果你想在一次讀取的字節數,你可以在一個緩衝區適合使用一個:
char buff[128];
size_t sz;
FILE *fp = fopen ("name.ima", "rb");
if (fp != NULL) {
while ((sz = fread (buff, 1, sizeof (buff), fp)) > 0)
doSomethingWith (buffer, sz);
fclose (fp);
}
什麼是'fileLength'初始化爲?你是如何選擇這個價值的?你測試了'fopen()'返回的值嗎? 'fread()'返回的那個? –