Bootstrap

fread总返回0的问题

 

 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,最后返回值就是读取的字节数了

 

;