fread函数和fwrite函数

1.函数功能

  用来读写一个数据块。

2.一般调用形式

  fread(buffer,size,count,fp);

  fwrite(buffer,size,count,fp);

3.说明

  (1)buffer:是一个指针,对fread来说,它是读入数据的存放地址。对fwrite来说,是要输出数据的地址。

  (2)size:要读写的字节数;

  (3)count:要进行读写多少个size字节的数据项;

  (4)fp:文件型指针。

注意:1 完成次写操(fwrite())作后必须关闭流(fclose());

2 完成一次读操作(fread())后,如果没有关闭流(fclose()),则指针(FILE * fp)自动向后移动前一次读写的长度,不关闭流继续下一次读操作则接着上次的输出继续输出;

3 fprintf() : 按格式输入到流,其原型是int fprintf(FILE *stream, const char *format[, argument, ...]);其用法和printf()相同,不过不是写到控制台,而是写到流罢了。注意的是返回值为此次操作写入到文件的字节数。如int c = fprintf(fp, "%s %s %d %f", str1,str2, a, b) ;str1:10字节;str2: 10字节;a:2字节;b:8字节,c为33,因为写入时不同的数据间自动加入一个空格。

文件使用之后一定要关闭,否则将不能正确显示内容.fwrite:读入两个学生信息然后用fwrite存入文件

fread:用fread从文件中读出学生信息。

fwrite.c

#include <stdio.h>
#define SIZE 2
struct student_type
{
 char name[10];
 int num;
 int age;
 char addr[10];
}stud[SIZE];
void save()
{
 FILE *fp;
 int i;
 if((fp=fopen("stu_list","wb"))==NULL)
 {
  printf("cant open the file");
  exit(0);
 }
 for(i=0;i<SIZE;i++)
 {
   if(fwrite(&stud[i],sizeof(struct student_type),1,fp)!=1)
    printf("file write error\n");
 }
 fclose(fp);
}
main()
{
 int i;
 for(i=0;i<SIZE;i++)
 {
   scanf("%s%d%d%s",&stud[i].name,&stud[i].num,&stud[i].age,&stud[i].addr);
   save();
 }
 for(i=0;i<SIZE;i++)
 {
   printf("%s,%d,%d",stud[i].name,stud[i].num,stud[i].age,stud[i].addr);
 }
}

fread.c

#include <stdio.h>
#define SIZE 2
struct student_type
{
 char name[10];
 int num;
 int age;
 char addr[10];
}stud[SIZE];
void read()
{
 FILE *fp;
 int i;
 if((fp=fopen("stu_list","rb"))==NULL)
 {
  printf("cant open the file");
  exit(0);
 }
 for(i=0;i<SIZE;i++)
 {
   if(fread(&stud[i],sizeof(struct student_type),1,fp)!=1)
    printf("file write error\n");
 }
 fclose(fp);
}
main()
{

int i;
 read();
 for(i=0;i<SIZE;i++)
 {
   printf("%s,%d,%d,%s",stud[i].name,stud[i].num,stud[i].age,stud[i].addr);
   printf("\n");
 }
}

在C语言中进行文件操作时,我们经常用到fread()和fwrite(),用它们来对文件进行读写操作。下面详细绍一下这两个函数的用法。

我们在用C语言编写程序时,一般使用标准文件系统,即缓冲文件系统。系统在内存中为每个正在读写的文件开辟“文件缓冲区”,在对文件进行读写时数据都经过缓冲区。要对文件进行读写,系统首先开辟一块内存区来保存文件信息,保存这些信息用的是一个结构体,将这个结构体typedef为FILE类型。我们首先要定义一个指向这个结构体的指针,当程序打开一个文件时,我们获得指向FILE结构的指针,通过这个指针,我们就可以对文件进行操作。例如:

#i nclude <stdio.h>

#i nclude <string.h>

int main()

{

FILE *fp;

char buffer[100] = "This is a test";

if((fp = fopen("c:\\example.txt", "w")) == 0)

{

printf("open failed!");

exit(1);

}

fwrite(buffer, 1, strlen("This is a test"), fp);

fclose(fp);

return 0;

}

通过以上代码,我们就在c盘的根目录下建立了一个名为example扩展名为.txt的文件,我们打开可以看到上面写上了This is a test。当我们对它将它读出时,用如下代码:

#i nclude <stdio.h>

#i nclude <mem.h>

int main()

{

FILE *fp;   int len;

char buffer[100];

/*memset(buffer, 1, 100); */

if((fp = fopen("c:\\example.txt", "r")) == 0)

{

printf("open failed!");

exit(1);

}

fseek(fp, 0L, SEEK_END);

len = ftell(fp);

rewind(fp);

fread(buffer, 1, len , fp);

printf("%s",buffer);

fclose(fp);

getch();

return 0;

}

可以看到,当我们使用memset了以后,读出了一大堆乱码,这是为什么呢?原因是我们在fwrite函数时写入的字节数是用strlen求得的,也就是说字符串最后的'\0'并没有写到文件中去。所以我们从文件中读到buffer中时也自然没有'\0',因为buffer中的数是随机的,除非buffer中最后一个字符的下一个数恰好随机到0(可能性很小,这里用memset将它排除),否则以%s将buffer中的字符输出时遇不到0,所以乱码产生。解决的办法有很多,你可以在向文件写数据时多写入一个字节,系统会自动写入0,fwrite(buffer, 1, strlen("This is a test")+1, fp);这样读出时最后就有一个0了。或者读出操作完成后,在最后一个字符后面补上一个0:buffer[len] = 0;这样问题也可得到解决。

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/greytree/archive/2006/06/02/769952.aspx

fread函数和fwrite函数的用法相关推荐

  1. fread函数和fwrite函数,read,write

    fread函数和fwrite函数 1.函数功能 用来读写一个数据块. 2.一般调用形式 fread(buffer,size,count,fp); fwrite(buffer,size,count,fp ...

  2. fread函数和fwrite函数详解

    fread函数和fwrite函数详解 fread() 头文件:#include<stdio.h> 功能:是用于读取二进制数据 原型: size_t fread(void*buffer,si ...

  3. C++中fread函数和fwrite函数的用法

    1.函数功能 用来读写一个数据块. 2.一般调用形式 fread(buffer,size,count,fp); fwrite(buffer,size,count,fp); 3.说明 (1)buffer ...

  4. linux写入二进制文件内容,fopen , fread fwrite 函数读写二进制文件 问题总结

    最近在解析 png 数据文件, 发现一个文件操作中容易忽略的问题,问题描述如下: 在使用 fread 读二进制文件(png 图片)的时候, 发现读取到内存中的数据和 二进制文件中的数据不一致, 同样, ...

  5. fread和fwrite函数

    http://www.cnblogs.com/witxjp/archive/2011/03/21/1990519.html 1.函数功能   用来读写一个数据块. 2.一般调用形式   fread(b ...

  6. fwrite函数的用法示例_C语言中的fwrite()函数(带有示例)

    fwrite函数的用法示例 C中的fwrite()函数 (fwrite() function in C) Prototype: 原型: size_t fwrite(void *buffer, size ...

  7. c语言fwrite参数,fwrite函数 fwrite函数用法

    fwrite()是C语言标准库中的一个文件处理函数,C语言函数,向文件写入一个数据块,功能是向指定的文件中写入若干数据块,如成功执行则返回实际写入的数据块数目.该函数以二进制形式对文件进行操作,不局限 ...

  8. php中fwrite函数的用法,fwrite函数介绍与使用方法详解

    以下正文:这篇文章主要介绍了PHP文件读写操作相关函数总结,本文总结了fwrite().fread().fgets().fgetc().file().readfile() 等函数的介绍及使用例子一.f ...

  9. 【C 语言】文件操作 ( 按照内存块的方式读写文件 | fread 函数 | fwrite 函数 )

    文章目录 一.fwrite 函数 二.fread 函数 三.按照内存块的方式写文件 四.按照内存块的方式读文件 一.fwrite 函数 fwrite 函数 : 将 const void *ptr 指针 ...

最新文章

  1. 安防企业如何应对市场发展新机遇
  2. 借助Scrum工作室使用敏捷原则提升组织响应能力
  3. 2017.3.9 对象 函数
  4. python遍历二维数组_在Python中遍历二维数组?
  5. 编写程序,输入一个N,返回角谷变换(达到1所需)的次数
  6. android 开发套件_Android套件
  7. 改变自己就是改变世界的开始
  8. oracle客户端登录失败,Win7系统配置Oracle客户端连接失败的解决方法
  9. gxworks2使用指令手册_编程软件GX-Works2公共篇操作手册三菱GX-Works2手册 - 广州凌控...
  10. ASP入门教程 1小时ASP入门,非常简单
  11. 生态 | 国内数据库领域权威学术会议NDBC 2020成功举办,人大金仓受邀参会并发表主题演讲...
  12. 乳酸的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
  13. 在短视频源码开发中,移动端音视频加密、防盗播实现方案
  14. 基于边缘特征的二值化阈值选取方法--ywp125
  15. 《你是我生命中最美的相遇》
  16. 【NOI2007】社交网络
  17. 《重构 改善既有代码的设计 1》重构原则
  18. js中对特殊字符进行转义
  19. 汽车日行灯做E-mark认证必须接受要工厂审核吗?
  20. 计算机三级数据库笔记

热门文章

  1. 三万字,七十图详解计算机网络六十二问(建议收藏)
  2. Oracle 11.2 参数详解
  3. SVN 服务端 和 客户端(转)
  4. MySQL日志(一)—— 慢查询日志slow log
  5. 在不同操作系统上安装Python的详细教程
  6. Discourse开源论坛搭建
  7. macOS:M1 上安装 Rosetta 2
  8. 没有购买域名和服务器,怎么搭建网站?(一)
  9. 场效应晶体管在电路中的五大作用,你了解哪一种?
  10. 做门户网站 个人站长的新好出路