如果您的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()'返回的那个? –