您的位置:

fread()函数详解

一、fread和read的区别

fread和read都是常用的文件读取函数,不同之处在于read以byte为单位读取,而fread则以数据类型为单位读取。对于二进制文件来说,它们的最终结果是一样的,但对于文本文件,如果使用read读取时,会将换行符,制表符等视为一个字符,而fread则直接按字符个数读取。

而且,在读取非二进制文件时,使用fread来读取文本文件会在读取到null字符时自动停止,而read会读取整个文件,直到文件结尾。

二、fread能读取的编码文件

fread函数可以操作所有二进制文件,包括纯文本文件、Unicode文件和UTF-8文件等。在读取纯文本文件时,需要考虑文本编码,如UTF-8、GBK、Unicode等。

三、fread函数的参数

fread函数的参数如下:

size_t fread ( void * ptr, size_t size, size_t count, FILE * stream );

其中,ptr是指向接收数据的内存地址的指针变量;size是每个数据项的大小,单位为字节(byte);count是要读取的数据项个数;stream是要读取的文件指针。

四、fread函数

fread函数的功能是从指定的流中读取数据,将其存储在指定的缓存区中。

由于是按照数据类型为单位读取数据,因此能够读取任意类型的数据,而不仅仅是字符类型数据。

五、fread读取文件

下面是利用fread函数读取文件的代码示例:

#include 

int main ()
{
  FILE *fp;
  char ch[100];

  fp = fopen("file.txt","r");
  fread(ch, 1, 50, fp);
  printf("%s", ch);
  fclose(fp);
  return 0;
}

  

以上代码打开名为file.txt的文件,并读取其前50个字符存储到字符数组ch中。注意,需要在读取完成后,手动在ch的结尾添加'\0'来表示字符串结束。

六、fread读取二进制文件

下面是利用fread函数读取二进制文件的代码示例:

#include 

struct MyData {
  int num;
  char name[20];
  float balance;
} data;

int main ()
{
  FILE *fp;

  fp = fopen("data.bin","rb");
  fread(&data, sizeof(struct MyData), 1, fp);
  printf("%d %s %f", data.num, data.name, data.balance);
  fclose(fp);
  return 0;
}

  

以上代码打开名为data.bin的二进制文件,读取其中的数据结构体存储到data中。每次读取一个数据,其大小由sizeof(struct MyData)指定。

七、fread歌曲

fread不仅可以用来读取文件,还可以用来读取其他数据,比如说二进制中的歌曲文件。下面是利用fread函数将歌曲读取进内存中的代码示例:

#include 
#include 
   

int main() {
    FILE *fp;
    char *buffer;
    size_t fileLen;
 
    fp = fopen("song.mp3", "rb");
    fseek(fp, 0, SEEK_END);
    fileLen = ftell(fp);
    fseek(fp, 0, SEEK_SET);
 
    buffer = (char *) malloc(fileLen * sizeof(char));
    fread(buffer, fileLen, 1, fp);
    fclose(fp);
    free(buffer);
 
    return 0;
}

   
  

以上代码将名为song.mp3的歌曲文件读取进内存中,使用malloc函数动态分配足够的内存来存储歌曲数据,并最终释放内存。

八、freading

freading表示使用fread函数进行文件读取操作,在编程中常常使用这种缩写方式来提高代码可读性。

九、fread函数的功能

除了上述功能外,fread函数还有以下几个功能:

  • 当读取中发生错误时,它会返回一个错误吗。
  • 它可以读取包括二进制文件或文本文件等多种文件类型。
  • 使用fread函数可以大大提高读取效率。