C语言中fread的一些疑问

网上科普有关“C语言中fread的一些疑问”话题很是火热,小编也是针对C语言中fread的一些疑问寻找了一些与之相关的一些信息进行分析,如果能碰巧解决你现在面临的问题,希望能够...

网上科普有关“C语言中fread的一些疑问”话题很是火热,小编也是针对C语言中fread的一些疑问寻找了一些与之相关的一些信息进行分析,如果能碰巧解决你现在面临的问题,希望能够帮助到您。

L_o_o_n_i_e 回答得不怎么准确!

我帮你解释下:

首先介绍fread函数

功 能: 从一个流中读数据

函数原型: int fread(void *ptr, int size, int nitems, FILE *stream); 参 数:用于接收数据的地址(指针)(ptr)

单个元素的大小(size) :单位是字节而不是位,例如读取一个整数值就是4 元素个数(nitems)

提供数据的文件指针(stream)

返回值:成功读取的元素个数

由上面介绍知道fread函数的第一个参数是个指针变量,可以指向任意类型实参!

严归正传,对于你这里的问题, 你代码中的s是个结构体数组变量,跟普通数组变量一样,数组名本身就是个指针常量,所以在buffer位置写成s是没有问题的。

那么为什么你这里读会变乱码呢?

虽然你帖的代码并没有全,但从你说的读取是乱码, 我大概猜到在你用fwrite函数把数据写进文件的时候是以每次一个结构体大小(也就是仅仅是数组s的一个元素而已,也就对应一个下标而已)和一个数据块的方式写进文件里的。 所以当你用fread函数读取的时候,假设你在buffer位置写成s,本身语法是没有问题的,但是就相当于你把数组s的仅一个元素的数据大小当成所有s的数据存到s中,也就是没有对应起来,所以显示会是乱码。

所以你可以有两种方式实现:

方式一:

在写的时候按一次以s的一个元素的数据大小作为一个数据块依次写进文件,然后读取时候也以同样方式读出来。

代码可以这么写:

假设s的大小为:SIZE_S

for(count = 0; count < SIZE_S; count++)

fwrite(&s[count], sizeof(struct student), 1, fp);

然后读取时:

for(count = 0; count < SIZE_S; count++)

fread(&s[count], sizeof(struct student), 1, fp);

方式二:

以整个数组s的数据大小作为一个数据块一次写进文件,然后读取时也同样全部读出来,最后可以以循环的方式打印出来。

代码实现如下:

假设s的大小为:SIZE_S

fwrite(s, SIZE_S * sizeof(struct student), 1, fp);

然后读取时:

fread(s, SIZE_S * sizeof(struct student), 1, fp);

最后打印:

for(count = 0; count < SIZE_S; count++)

fread(&s[count], sizeof(struct student), 1, fp);

明白了记得给哥哥顶下~~~ ^_^

fwrite(将数据写至文件流)

相关函数 fopen,fread,fseek,fscanf

表头文件 #include<stdio.h>

定义函数 size_t fwrite(const void * ptr,size_t size,size_t nmemb,FILE * stream);

函数说明 fwrite()用来将数据写入文件流中。参数stream为已打开的文件指针,参数ptr 指向欲写入的数据地址,总共写入的字符数以参数size*nmemb来决定。Fwrite()会返回实际写入的nmemb数目。

返回值 返回实际写入的nmemb数目。

范例 #include<stdio.h>

#define set_s (x,y) {strcoy(s[x].name,y);s[x].size=strlen(y);}

#define nmemb 3

struct test

{

char name[20];

int size;

}s[nmemb];

main()

{

FILE * stream;

set_s(0,”Linux!”);

set_s(1,”FreeBSD!”);

set_s(2,”Windows2000.”);

stream=fopen(“/tmp/fwrite”,”w”);

fwrite(s,sizeof(struct test),nmemb,stream);

fclose(stream);

}

执行 参考fread()。

fread(从文件流读取数据)

相关函数 fopen,fwrite,fseek,fscanf

表头文件 #include<stdio.h>

定义函数 size_t fread(void * ptr,size_t size,size_t nmemb,FILE * stream);

函数说明 fread()用来从文件流中读取数据。参数stream为已打开的文件指针,参数ptr 指向欲存放读取进来的数据空间,读取的字符数以参数size*nmemb来决定。Fread()会返回实际读取到的nmemb数目,如果此值比参数nmemb 来得小,则代表可能读到了文件尾或有错误发生,这时必须用feof()或ferror()来决定发生什么情况。

返回值 返回实际读取到的nmemb数目。

附加说明

范例 #include<stdio.h>

#define nmemb 3

struct test

{

char name[20];

int size;

}s[nmemb];

main()

{

FILE * stream;

int i;

stream = fopen(“/tmp/fwrite”,”r”);

fread(s,sizeof(struct test),nmemb,stream);

fclose(stream);

for(i=0;i<nmemb;i++)

printf(“name[%d]=%-20s:size[%d]=%d\n”,i,s[i].name,i,s[i].size);

}

执行 name[0]=Linux! size[0]=6

name[1]=FreeBSD! size[1]=8

name[2]=Windows2000 size[2]=11

关于“C语言中fread的一些疑问”这个话题的介绍,今天小编就给大家分享完了,如果对你有所帮助请保持对本站的关注!

本文来自作者[苌佳杰]投稿,不代表小熊号立场,如若转载,请注明出处:https://xx-scm.com/cshi/202607-178942.html

(179)

文章推荐

  • 商丘师范学院什么档次

    网上科普有关“商丘师范学院什么档次”话题很是火热,小编也是针对商丘师范学院什么档次寻找了一些与之相关的一些信息进行分析,如果能碰巧解决你现在面临的问题,希望能够帮助到您。商丘师范学院什么档次?相关内容如下:商丘师范学院不是985大学、不是211大学、不是双一流大学,是双万计划大学。因此我们可以判断

    2025年03月23日
    299
  • 推荐一款“秦皇岛麻将怎么一直输(开挂神器怎么用)

    网上科普有关“秦皇岛麻将怎么一直输”话题很是火热,小编也是针对同城衡阳字牌作弊开挂的方法寻找了一些与之相关的一些信息进行分析,如果能碰巧解决你现在面临的问题,希望能够帮助到您。  您好,秦皇岛麻将怎么一直输这款游戏可以开挂的,确实是有挂的,通过微信【游戏】很多玩家在这款游戏中打牌都会发现

    2025年05月15日
    66
  • 三公海南麻将怎样提高胜率”果然有挂

    网上科普有关“三公海南麻将怎样提高胜率”话题很是火热,小编也是针对同城衡阳字牌作弊开挂的方法寻找了一些与之相关的一些信息进行分析,如果能碰巧解决你现在面临的问题,希望能够帮助到您。  您好,三公海南麻将怎样提高胜率这款游戏可以开挂的,确实是有挂的,通过微信【游戏】很多玩家在这款游戏中打牌

    2025年05月19日
    56
  • 实测辅助”微乐小程序麻将万能开挂器”其实确实有挂

    微乐小程序麻将万能开挂器网上科普有关“微乐小程序麻将万能开挂器”话题很是火热,小编也是针对微乐小程序麻将万能开挂器寻找了一些与之相关的一些信息进行分析,如果能碰巧解决你现在面临的问题,希望能够帮助到您。  您好,微乐小程序麻将万能开挂器这款游戏可以开挂的,确实是有挂的,通过微信【】很

    2025年05月22日
    79
  • 实测辅助”微乐陕西麻将有挂吗(详细真的有挂)

    微乐陕西麻将有挂吗网上科普有关“微乐陕西麻将有挂吗”话题很是火热,小编也是针对微乐陕西麻将有挂吗寻找了一些与之相关的一些信息进行分析,如果能碰巧解决你现在面临的问题,希望能够帮助到您。  您好,微乐陕西麻将有挂吗这款游戏可以开挂的,确实是有挂的,通过微信【】很多玩家在这款游戏中打牌都

    2025年05月23日
    56
  • 建筑工程审计标准?

    网上科普有关“建筑工程审计标准?”话题很是火热,小编也是针对建筑工程审计标准?寻找了一些与之相关的一些信息进行分析,如果能碰巧解决你现在面临的问题,希望能够帮助到您。建筑工程审计标准具体内容是什么,下面中达咨询为大家解答。一、审前准备工作1、收集工程相关的文件资料。施工合同、招投标文件、编制标底等工

    2025年07月13日
    239
  • 教师备案制和编制的区别

    网上科普有关“教师备案制和编制的区别”话题很是火热,小编也是针对教师备案制和编制的区别寻找了一些与之相关的一些信息进行分析,如果能碰巧解决你现在面临的问题,希望能够帮助到您。备案制教师与编制教师最大的区别就是备案制教师没有编制。备案制教师虽然没有编制,但是在职称考评、岗位聘用、考核奖惩、薪酬分配、社

    2025年07月19日
    250
  • 教程开挂辅助“手机斗牛软件怎么开挂视频教程(详细真的有挂)

    网上科普有关“手机斗牛软件怎么开挂视频教程”话题很是火热,小编也是针对同城衡阳字牌作弊开挂的方法寻找了一些与之相关的一些信息进行分析,如果能碰巧解决你现在面临的问题,希望能够帮助到您。  您好,手机斗牛软件怎么开挂视频教程这款游戏可以开挂的,确实是有挂的,通过微信【游戏】很多玩家在这款游

    2025年08月05日
    21
  • 开挂工具“微乐福建麻将怎样提高胜率”其实确实有挂

    网上科普有关“微乐福建麻将怎样提高胜率”话题很是火热,小编也是针对同城衡阳字牌作弊开挂的方法寻找了一些与之相关的一些信息进行分析,如果能碰巧解决你现在面临的问题,希望能够帮助到您。  您好,微乐福建麻将怎样提高胜率这款游戏可以开挂的,确实是有挂的,通过微信【游戏】很多玩家在这款游戏中打牌

    2025年08月30日
    35
  • 疫情英雄人物事迹简介钟南山怎么写(疫情中的英雄事迹钟南山)

    致敬抗疫英雄钟南山的故事1、致敬抗疫英雄钟南山的故事主要包括以下几点:紧急出征:2020年1月18日,84岁的钟南山院士在春节前夕接到紧急通知,要求赶往武汉。尽管航班和火车票紧张,他仍克服困难,挤上了傍晚开往武汉的高铁,甚至没有准备羽绒服。逆行而上:在武汉市卫生健康委员会通报新增确诊病例时,钟南山

    2025年09月07日
    26

发表回复

本站作者后才能评论

评论列表(4条)

  • 苌佳杰
    苌佳杰 2026年07月03日

    我是小熊号的签约作者“苌佳杰”!

  • 苌佳杰
    苌佳杰 2026年07月03日

    希望本篇文章《C语言中fread的一些疑问》能对你有所帮助!

  • 苌佳杰
    苌佳杰 2026年07月03日

    本站[小熊号]内容主要涵盖:国足,欧洲杯,世界杯,篮球,欧冠,亚冠,英超,足球,综合体育

  • 苌佳杰
    苌佳杰 2026年07月03日

    本文概览:网上科普有关“C语言中fread的一些疑问”话题很是火热,小编也是针对C语言中fread的一些疑问寻找了一些与之相关的一些信息进行分析,如果能碰巧解决你现在面临的问题,希望能够...