C语言结构体-结构的文件读写fread()、fwrite()以及读写文件乱码

1.fread()函数
函数原型:size_t fread( void *restrict buffer, size_t size, size_t count, FILE *restrict stream );
第一个参数是要输入的对象的指针
第二个参数是每个对象的大小(字节为单位)
第三个参数是要读取的对象个数
函数功能:从给定输入流stream读取最多count个对象到数组buffer中
返回值:返回成功读取的对象个数,若出现错误或到达文件末尾,则可能小于count。
2.fwrite()函数
函数原型:size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream)
第一个参数是要被读取对象的指针
第二个参数是每个对象的大小
第三哥参数是读取对象的个数
函数功能:把ptr所指向的数组中的数据写入到给定流stream中。
返回值:如果成功,该函数返回一个 size_t 对象,表示元素的总数,该对象是一个整型数据类型。

#include<stdio.h>
struct inf {
char name[12];
char high[5];
char weight[5];
};
int main()
{
 FILE *fl=fopen("test.txt","a+b");
 struct inf Xiaoming={"Xiaoming","185","80"};//初始化
 fwrite(&Xiaoming,sizeof(struct inf),1,fl);
return 0;
}

运行结果:
Xiaoming 185 80
但是如果将high、weight类型更改为double 则在文件中显示的是乱码
如下:

#include<stdio.h>
struct inf {
char name[12];
double high;
double weight;
};
int main()
{
 FILE *fl=fopen("test.txt","wb");
 struct inf copy,Xiaoming={"Xiaoming",185,80};//初始化
 fwrite(&Xiaoming,sizeof(struct inf),1,fl);
 fclose(fl);
return 0;
}

最后打开txt文本:
Xiaoming 烫烫 g@ T@
这是为什么呢?
fread()函数和fwrite()函数要使用二进制文件,虽然结构中有些内容是文本,但是成员high和weigh不是文本,如果用文本编辑器查看,会有文本部分显示正常,但是数值部分的内容不可读,甚至会导致文本编辑器出现乱码
当然,再将乱码读入显示出来,却是正常的。

#include<stdio.h>
struct inf {
char name[12];
double high;
double weight;
};
int main()
{
 FILE *fl=fopen("test.txt","r+b"); //上一个程序是w+b 以这种方式读出依旧是乱码因为w模式不允许读
 struct inf copy,Xiaoming={"Xiaoming",185,80};//初始化
 fwrite(&Xiaoming,sizeof(struct inf),1,fl);
 rewind(fl); 		//回退文件头
 fread(&copy,sizeof(struct inf),1,fl);
 printf("%s%lf%lf",copy.name,copy.high,copy.weight);
return 0;
}

运行结果:
Xiaoming185.00000080.000000

  • 9
    点赞
  • 43
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值