size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);
这个函数以前一直没理解为什么 size_t size, size_t nmemb参数来确定读取缓冲区的大小,我开始以为两个可以互换,而且在有些场合互换确实也没问题,直到今天碰到了打开一个文件,读取的长度总是返回0。
事例代码如下:
char buffer[1024*100];
FILE*fp=fopen("1.jpg","r");
int lenbuffer=fread(buffer,1024*100,1,fp);
printf("filesize=%d/n",lenbuffer);
fclose(fp);
返回值总是0,我一直以为是打开文件失败,其实不是
在函数fread中的每次读取size_t大小的数据放到缓冲区,最多为nmemb个,所以返回值其实是读取了多少个size_t大小的数据块,这里由于我的文件小于100k,所以读取总是没有够一个1024*100大小的数据块,返回肯定是0了,这里其实是想返回读取的字节数,可以修改fread如下:
int lenbuffer=fread(buffer,1,1024*100,fp);
这里就是每次读取一个字节,最多读取1024*100,最后返回值就是读取的字节数了