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/202605-178942.html

(166)

文章推荐

  • 世界100大足球巨星

    网上科普有关“世界100大足球巨星”话题很是火热,小编也是针对世界100大足球巨星寻找了一些与之相关的一些信息进行分析,如果能碰巧解决你现在面临的问题,希望能够帮助到您。现役50大足球巨星!!!!No50加里-内维尔(曼联)内维尔在右后卫上的表现的确出乎所有人的预料,他总是表现的异常沉稳,而队长

    2025年03月15日
    381
  • 教程辅助!天府红桃3到底有挂吗(万能开挂器通用版)

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

    2025年04月09日
    55
  • 教程辅助!拉米大厅有挂没有”实测确实有挂

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

    2025年04月09日
    66
  • 必备科技“网跃掌心麻将怎么上挂(其实真的能开挂)

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

    2025年04月23日
    65
  • 推荐一款“河洛杠次麻将开挂是怎样的”分享装挂技巧步骤

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

    2025年05月14日
    66
  • 推荐一款“牛总管包赢软件(详细真的有挂)

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

    2025年05月14日
    41
  • 6秒懂!福州麻将挂要多少钱一个(真的有挂)

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

    2025年06月25日
    29
  • 辅助教程实测“四川麻将换三张挂多少钱(如何开挂)

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

    2025年07月13日
    21
  • 辅助教程实测“好彩麻将是不是可以开挂(其实真的能开挂)

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

    2025年07月14日
    18
  • 玩家必搜“如何提高哈灵麻将胜率”(其实是有挂)

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

    2025年08月25日
    18

发表回复

本站作者后才能评论

评论列表(4条)

  • 苌佳杰
    苌佳杰 2026年05月09日

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

  • 苌佳杰
    苌佳杰 2026年05月09日

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

  • 苌佳杰
    苌佳杰 2026年05月09日

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

  • 苌佳杰
    苌佳杰 2026年05月09日

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