fread函数详解

本文详细介绍了fread函数的使用方法及注意事项,包括如何通过fread读取不同大小和数量的数据块,以及为何在处理二进制文件时fread更为有效。文章还强调了在处理二进制流时不能使用strlen或sizeof来测量长度。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

原博客地址


函数原型:
size_t   fread(   void   *buffer,   size_t   size,   size_t   count,   FILE   *stream   ) 
  buffer   是读取的数据存放的内存的指针(可以是数组,也可以是新开辟的空间,buffer就是一个索引)   
   size       是每次读取的字节数   
  count     是读取次数   
  strean   是要读取的文件的指针   

  例如   从文件fp里读取100个字节   可用以下语句   
    
  fread(buffer,100,1,fp)   
  fread(buffer,50,2,fp)   
  fread(buffer,1,100,fp)   
**************************************************************************************    
对读出的二进制流是不能用strlen()或者sizeof()求其长度和大小的。
**************************************************************************************

fread可以读二进制文件,有时用字符方式去读文件不能读完整个文件,但是二进制方式就可以 。
这就是因为字符方式用特定的标记结尾的,读取时只要碰到该标记就自动结束

函数fread()读取[num]个对象(每个对象大小为size(大小)指定的字节数),并把它们替换到由buffer(缓冲区)指定的数组. 数据来自给出的输入流. 函数的返回值是读取的内容数量...


大量数据输入时用fread函数会比scanf快

`fread` 函数是 C 语言中用于从文件中读取数据的函数,其函数原型如下: ```c size_t fread(void *ptr, size_t size, size_t count, FILE *stream); ``` 其中,参数含义如下: - `ptr`:指向存储读取数据的缓冲区的指针。 - `size`:每个数据项的大小,以字节为单位。 - `count`:要读取的数据项的数量。 - `stream`:指向 FILE 类型结构体的指针,表示要读取数据的文件。 `fread` 函数的返回值为实际读取的数据项数量,如果该数量与 `count` 参数不同,则可能表示到达了文件的结尾或者读取错误。 使用 `fread` 函数时,需要注意以下几点: - 每个数据项的大小和数量必须是正整数。 - 缓冲区 `ptr` 的大小应当足够存储 `size * count` 个字节,否则可能会导致缓冲区溢出。 - `fread` 函数在读取数据时可能会因为文件结尾或者读取错误而读取到比 `count` 参数所指定的数据项数量少的数据项,因此需要根据返回值判断实际读取的数据项数量。 下面是一个使用 `fread` 函数读取二进制文件的示例代码: ```c #include <stdio.h> #include <stdlib.h> int main() { FILE *fp; char *buffer; long file_size; fp = fopen("data.bin", "rb"); if (!fp) { printf("Failed to open file!\n"); exit(1); } // 获取文件大小 fseek(fp, 0, SEEK_END); file_size = ftell(fp); rewind(fp); // 分配缓冲区 buffer = (char*)malloc(sizeof(char) * file_size); if (!buffer) { printf("Failed to allocate memory!\n"); exit(2); } // 读取文件 if (fread(buffer, file_size, 1, fp) != 1) { printf("Failed to read file!\n"); exit(3); } // TODO: 处理数据 // 关闭文件和释放缓冲区 fclose(fp); free(buffer); return 0; } ``` 以上代码中,我们首先打开了一个名为 `data.bin` 的二进制文件,然后使用 `fseek` 和 `ftell` 函数获取了文件的大小,并分配了一个足够大的缓冲区,最后使用 `fread` 函数从文件中读取数据,读取的数据存储在缓冲区中,然后我们可以对读取到的数据进行处理。最后,我们需要关闭文件并释放缓冲区。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值