c语言fread6,c语言中fread的用法「建议收藏」

c语言fread6,c语言中fread的用法「建议收藏」fread是以记录为单位的i/o函数,fread和fwrite函数一般用于二进制文件的输入输出。下面小编就跟你们详细介绍下c语言中fread的用法,希望对你们有用。c语言中fread的用法如下:#includesize_tfwrite(constvoid*ptr,size_tsize,size_tnmemb,file*stream);返回值:读或写的记录数,成功时返回的记录数等…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

fread是以记录为单位的i/o函数,fread和fwrite函数一般用于二进制文件的输入输出。下面小编就跟你们详细介绍下c语言中fread的用法,希望对你们有用。

c语言中fread的用法如下:

#include

size_t fwrite(const void *ptr, size_t size, size_t nmemb, file *stream);

返回值:读或写的记录数,成功时返回的记录数等于nmemb,出错或读到文件末尾时返回的记录

数小于nmemb,也可能返回0。

fread用于读写记录,这里的记录是指一串固定长度的字节,比如一个int、一个结构体或者一个定长数组。参数size指出一条记录的长度,而nmemb指出要读或写多少条记录,这些记录在ptr所指的内存空间中连续存放,共占size * nmemb个字节,fread从文件stream中读出size * nmemb个字节保存到ptr中,而fwrite把ptr中的size * nmemb个字节写到文件stream中。

nmemb是请求读或写的记录数,fread和返回的记录数有可能小于nmemb指定的记录数。例如当前读写位置距文件末尾只有一条记录的长度,调用fread时指定nmemb为2,则返回值为1。如果当前读写位置已经在文件末尾了,或者读文件时出错了,则fread返回0。如果写文件时出错了,则fwrite的返回值小于nmemb指定的值。下面的例子由两个程序组成,一个程序把结构体保存到文件中,另一个程序和从文件中读出结构体

fread的例子程序如下:

/* -------------------writerec.c--------------- */

#include

#include

struct record {

char name[10];

int age;

};

int main(void)

{

struct record array[2] =

“ken”, 24}, {“knuth”, 28}};

file *fp = fopen(“recfile”, “w”);

if (fp == null) {

perror(“open file recfile”);

exit(1);

}

fwrite(array, sizeof(struct record), 2, fp);

fclose(fp);

return 0;

}

/* -------------------readrec.c----------------- */

#include

#include

struct record {

char name[10];

int age;

};

int main(void)

{

struct record array[2];

file *fp = fopen(“recfile”, “r”);

if (fp == null) {

perror(“open file recfile”);

exit(1);

}

fread(array, sizeof(struct record), 2, fp);

printf(“name1: %s\tage1: %d\n”, array[0].name, array[0].age);

printf(“name2: %s\tage2: %d\n”, array[1].name, array[1].age);

fclose(fp);

return 0;

}

$ gcc writerec.c -o writerec

$ gcc readrec.c -o readrec

发现生成的文件recfile不能直接打开。

原因:我们把一个struct record结构体看作一条记录,由于结构体中有填充字节,每条记录占16字节,

把两条记录写到文件中共占32字节。该程序生成的recfile文件是二进制文件而非文本文件,因为其

中不仅保存着字符型数据,还保存着整型数据24和28(在od命令的输出中以八进制显示为030和034)。

注意,直接在文件中读写结构体的程序是不可移植的,如果在一种平台上编译运行writebin.c程序,

把生成的recfile文件拷到另一种平台并在该平台上编译运行readbin.c程序,则不能保证正确读出

文件的内容,因为不同平台的大小端可能不同(因而对整型数据的存储方式不同),结构体的填充方式

也可能不同(因而同一个结构体所占的字节数可能不同,age成员在name成员之后的什么位置也可能不同)。

通过readrec程序读取文件recfile的内容,说明writerec程序的确记录成功写入recfile中。

从recfile读出的内容如下:

name1: ken   age1: 24

name2: knuth  age2: 28

fwrite和fread的应用举例:

1.将一个字符串写入文件:

char *str=”hello,i am a test program!”;

fwrite(str,sizeof(char),strlen(str),fp)

2.将一个字符数组写入文件:

char str[]={‘a’,’b’,’c’,’d’,’e’};

fwrite(str,sizeof(char),sizeof(str),fp)

3.将一个整型数组写入文件:

int a[]={12,33,23,24,12};

先计算数组元素个数nmemb,之后

fwrite(a,sizeof(int),nmemb,fp)

注:由于程序生成的文件是二进制文件而非文本文件,因此,不用机器,整数的表达不同,

所以无法直接打开生成文件。可通过fread函数检验数据是否写入文件。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/197588.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • spring中@transactional注解的作用(spring 事务实现原理)

    事务管理对于企业应用来说是至关重要的,即使出现异常情况,它也可以保证数据的一致性。spring支持编程式事务管理和声明式事务管理两种方式。编程式事务管理使用TransactionTemplate或者直接使用底层的PlatformTransactionManager。对于编程式事务管理,spring推荐使用TransactionTemplate。 声明式事务管理建立在

    2022年4月15日
  • 简单理解Binder机制的原理

    一、概述Android系统中,涉及到多进程间的通信底层都是依赖于BinderIPC机制。例如当进程A中的Activity要向进程B中的Service通信,这便需要依赖于BinderIPC。不仅于此,整个Android系统架构中,大量采用了Binder机制作为IPC(进程间通信)方案。当然也存在部分其他的IPC方式,如管道、SystemV、Socket等。那么Android为什么不使用这…

    2022年4月6日
  • Window系统内核版本号及其查看方法「建议收藏」

    Window系统内核版本号及其查看方法「建议收藏」一.WindowsNTWindwosNT是一系列操作系统的总称。WindowsNT(NewTechnology)是Microsoft在1993年推出的面向工作站、网络服务器和大型计算机的网络操作系统,也可做PC操作系统。它与通信服务紧密集成,基于OS/2NT基础编制。OS/2由微软和IBM联合研制,分为微软的MicrosoftOS/2NT与IBM的IBMOS/2。

    2022年8月23日
  • sqldeveloper如何连接数据库_创建数据库的五个步骤

    sqldeveloper如何连接数据库_创建数据库的五个步骤转载出处:https://blog.csdn.net/u010185220/article/details/53106196SQLDeveloper不能用于创建Oracle数据库,只能用来连接已经创建的数据库,数据库的建立要通过DatabaseConfigurationAssistant(DBCA)来完成。找到开始菜单中Oracle-OraDb11g_home1下…

    2022年9月15日
  • Delphi QuotedStr函数的原型

    Delphi QuotedStr函数的原型DelphiQuotedStr函数的原型functionQuotedStr(constS:string):string;
    var
     I:Integer;
    begin
     Result:=S;
     forI:=Length(Result)downto1do
       ifResult[I]=””thenInsert(””,Result,I);
     Result:=””+Resul

    2022年10月18日
  • phpstorm 常用快捷键

    phpstorm 常用快捷键

    2022年3月2日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号