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函数检验数据是否写入文件。

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 任务管理器进程中多个chrome.exe的问题

    任务管理器进程中多个chrome.exe的问题

  • php递归函数详解_php递归优化费波那切

    php递归函数详解_php递归优化费波那切PHP递归算法代码:复制代码代码如下:<?php//定义PI一分的角度的值define(“PII”,M_PI/180);//新建图像资源,并定义其背景为白色,前景色为黑色$im=imagecreate(670,500);$white=imagecolorallocate($im,0xFF,0xFF,0xFF);$g=imagecolorallocate($im,0x00,0x00,0x0…

  • 逆向工程入门「建议收藏」

    逆向工程入门「建议收藏」本问只是为初入逆向工程大坑的新人们指出方向学习,没有实质性的技术。总的来说,基础才是最重要的。逆向工程入门应该算是所有学习方向中最难的。但是选择了这一方向的请不要放弃,一旦学成,必定会是大神级别的存在。那么,逆向工程的入门需要学习什么?1.c语言学习c语言是逆向工程的基础。如果是学习渗透方向的,也许可以选择python作为自己的第一门编程语言。但是作为逆向工程方向,第一门入门的语言没有选择,只有

  • 树莓派容易坏吗_树莓派的使用

    树莓派容易坏吗_树莓派的使用清华下载地址下载地址下载地址xshell下载地址③树莓派插入TF卡后,等连接上手机就可查看IP地址2.远程登录①打开后选择新建②软件更新源③系统更新源④开始更新4.图形化显示界面为方便大家更直观的感受,可以下载一个图形化的显示桌面,这里推荐VNC(windows也自带了该功能,因为太卡了故不推荐,想用的可以试试:远程桌面连接)⭐有条件的可以直接连上显示屏使用①VNC的网盘连接,大家直接下载就行②打开树莓派的VNCServer(默认关闭)A.在

  • datagrip2021.7.15 最新激活码(注册激活)

    (datagrip2021.7.15 最新激活码)2021最新分享一个能用的的激活码出来,希望能帮到需要激活的朋友。目前这个是能用的,但是用的人多了之后也会失效,会不定时更新的,大家持续关注此网站~https://javaforall.cn/100143.htmlIntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,上面是详细链接哦~ML…

  • iPhone手机屏幕尺寸

    iPhone手机屏幕尺寸

发表回复

您的电子邮箱地址不会被公开。

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