C语言 fread 函数

Posted 猿说编程

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言 fread 函数相关的知识,希望对你有一定的参考价值。

目录

零基础 C/C++ 学习路线推荐 : C/C++ 学习目录 >> C 语言基础入门

一.fread 函数简介

C 语言 fread 函数用于读取文件中的数据到指定缓冲区中,fread 函数声明如下:

/*
*描述:关闭文件
*
*参数:
*   [out] ptr:缓冲区,用于存放读取到的数据
*   [in]  size:每个元素的大小(单位是字节)
*   [in]  nmemb:要读取的元素个数
*   [in]  stream:文件指针句柄
*
*返回值:成功读取的元素总数会以 size_t 对象返回,size_t 对象是一个整型数据类型。如果总数与 nmemb 参数不同,则可能发生了一个错误或者到达了文件末尾。
*/
size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream)

返回成功读取的元素个数,若出现错误或到达文件末尾,则可能小于 nmemb ;

fread 函数不区分文件尾和错误,因此调用者必须用 feofferror 才能判断发生了什么;

二.fread 函数使用

/******************************************************************************************/
//@Author:猿说编程
//@Blog(个人博客地址): www.codersrc.com
//@File:C语言教程 - C语言 fread 函数
//@Time:2021/07/20 07:30
//@Motto:不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
/******************************************************************************************/

#include <stdio.h>
#include <string.h>

int main()
{
   FILE *fp;
   char c[] = "www.codersrc.com";
   char buffer[2048] = {0};

   /* 打开文件用于读写 */
   fp = fopen("file.txt", "w+");

   /* 写入数据到文件 */
   fwrite(c, strlen(c) + 1, 1, fp);

   /* 偏移到文件文件的开头 */
   fseek(fp, 0, SEEK_SET);

   /* 读取并显示数据 */
   fread(buffer,1 , strlen(c)+1, fp);
   printf("%s\\n", buffer);
   fclose(fp);

   return(0);
}

三.猜你喜欢

  1. C 语言 数组下标越界和内存溢出区别
  2. C 语言 使用指针遍历数组
  3. C 语言 指针和数组区别
  4. C 语言 指针数组和数组指针区别
  5. C 语言 野指针
  6. C 语言 函数值传递和址传递
  7. C 语言 函数不定长参数
  8. C 语言 函数指针
  9. C 语言 指针函数
  10. C 语言 回调函数 callback
  11. C 语言 #pragma once
  12. C 语言 #include <> 与 #include “” 区别
  13. C 语言 const 修饰函数参数
  14. C 语言 const 和 define 区别
  15. C 语言 #运算符
  16. C 语言 ##运算符
  17. C 语言 __VA_ARGS__
  18. C 语言 ##__VA_ARGS__
  19. C 语言 函数不定长参数 ##__VA_ARGS__经典案例
  20. C 语言 va_start / va_end / va_arg 自定义 printf 函数
  21. C 语言 main 函数
  22. C 语言 main 函数参数 main(int argc, char *argv[])
  23. C 语言 局部变量
  24. C 语言 全局变量
  25. C 语言 全局变量和局部变量区别
  26. C 语言 static
  27. C 语言 extern

未经允许不得转载:猿说编程 » C 语言 fread 函数

本文由博客 - 猿说编程 猿说编程 发布!

c语言中fread函数怎么用

有一个二进制文件,我想把里面的一个八个字节的数读出来(其实就是1)然后我建立一个int a[];数组,然后调用fread(a,8,1,fp);fp是对应打开文件的指针,怎么就没读进去呢?我把数组改成double 后再读,就能读进去了,可是读的不是1,是一个接近0的小数,我就崩溃了,我的问题是,第二个参数,跟第一个参数有关系吗?八个字节的数到底怎么才能读出来?跪求高手解答!

c语言中fread函数语法为size_t fread( void *restrict buffer, size_t size, size_t count, FILE *restrict stream )。buffer是指向要读取的数组中首个对象的指针,size是每个对象的大小(单位是字节),count是要读取的对象个数,stream是输入流。通过fread函数可进行数据读取,返回成功读取的对象个数。

扩展资料:

fread函数从给定输入流stream读取最多count个对象到数组buffer中(相当于以对每个对象调用size次fgetc),把buffer当作unsignedchar数组并顺序保存结果。流的文件位置指示器前进读取的字节数。

若出现错误,则流的文件位置指示器的位置不确定。若没有完整地读入最后一个元素,则其值不确定,可能小于count。若size或count为零,则fread返回零且不进行其他动作。fread不区分文件尾和错误,因此调用者必须用feof和ferror才能判断发生了什么。

参考技术A

fread函数可从文件中读取二进制数据

语法:

A = fread(fid, count)

A = fread(fid, count, precision)

其中fid为指针所指文件中的当前位置,count指读取的数据个数, precision表示以什么格式的数据类型读取数据。

例子:

fid = fopen('alphabet.txt', 'r');
c = fread(fid, 5)'
c =
65 66 67 68 69
fclose(fid);

程序说明:alphabet文件中按顺序存储着26个英文字母,读取文件之前要先打开文件,由于未指定读取数据的类型,所以程序指定默认类型为无符号字符型即uchar,65、66、67、68、69代表A、B、C、D、E,文件用完还要记得关闭文件,以便释放指针。

扩展资料:

用 法

int feof(FILE *stream);

参数

流 :FILE结构的指针 

注意:feof判断文件结束是通过读取函数fread/fscanf等返回错误来识别的,故而判断文件是否结束应该是在读取函数之后进行判断。比如,在while循环读取一个文件时,如果是在读取函数之前进行判断,则如果文件最后一行是空白行,可能会造成内存错误。

参考资料:

fread--百度百科

参考技术B

1、C语言中:fread是一个函数。从一个文件流中读数据,最多读取count个元素,每个元素size字节,如果调用成功返回实际读取到的元素个数,如果不成功或读到文件末尾返回 0。
函数原型:size_t fread ( void *buffer, size_t size, size_t count, FILE *stream) ;
参数:
buffer  用于接收数据的内存地址
size  要读的每个数据项的字节数,单位是字节
count  要读数据项的个数,每个数据项size个字节.
stream  输入流的指针
返回值:
返回实际读取的元素个数。如果返回值与count不相同,则可能文件结尾或发生错误。从ferror和feof获取错误信息或检测是否到达文件结尾。
2、例程:

#include<stdio.h>
#include<string.h>
int main(void)

    FILE*stream;
    char msg[]="this is a test";
    char buf[20];
    if((stream=fopen("DUMMY.FIL","w+"))==NULL)
    
        fprintf(stderr,"Cannot open outputfile.\\n");
        return 0;
    
    fwrite(msg,1,strlen(msg)+1,stream);
    fseek(stream,0,SEEK_SET);
    fread(buf,strlen(msg)+1,1,stream);
    printf("%s\\n",buf);
    fclose(stream);
    return0;

参考技术C 如果你想把这8个字节当成一个数来读的话可以这样(在VC环境下)
__int64 a;
fread(&a,sizeof(__int64),1,fp);
如果你想分别读出这8个字节的话,可以这样:
char a[8];
fread(a,sizeof(char),8,fp);
希望对你有帮助
__int64也可以用来表示一个整数,只不过它能表示的范围比int类型的要大,int类型占4个字节,而这个__int64占8个字节。如果你用的是gcc编译器(像DEV-C等),那应该是long long追问

首先非常感谢!我是想把8个字节当成一个数来读。__int64是什么类型的呢?我用
fread(&a,sizeof(__int64),1,fp);然后输出,想看看对不对,我就用cout<<a;然后提示出错。我用printf("%d",a);结果显示的0,还是不对呀。求进一步指导。我的QQ号是:460730390,急需帮助

本回答被提问者采纳
参考技术D unsigned char a[8];
fread(a,8,1,fp);
然后在对a的元素按需求处理。

如果声明成double,必须在写文件的时候写入的变量也是double,用double读出来才对。
写入字节,用double读出来肯定不对,double是浮点,不是整数,使用8个字节来存储,1个符号位,11位阶数,52位尾数。追问

不行啊,我要读的是数,不是字符

追答

unsigned char 是字节数据,二进制数据,表示范围(00H-FFH),字符(00H-7FH)只是其中的一部分。

以上是关于C语言 fread 函数的主要内容,如果未能解决你的问题,请参考以下文章

c语言中fread函数怎么用

C语言 fread 函数

c语言中fread的用法

为啥C语言我用fread读入数据会乱码,函数如下

关于C语言fread的用法

计算机编程C语言中,fread函数的返回值的问题