c语言中将结构体写入文件,C语言中将结构体写入文件

本文介绍了如何使用C语言的fwrite和fread函数将结构体写入和读出文件,强调了这种方法的移植性和内存布局问题。在结构体中包含指针或浮点数时,可能会导致数据不一致或无法正确读取。同时,结构体的内存对齐在不同编译器和平台上有所不同,可能导致文件大小和内容差异。实验展示了在Linux GCC和Windows VC++编译器下结构体的写入和读取结果,并指出结构体指针在文件中的写入仅保存指针值,读取时可能导致失效。
摘要由CSDN通过智能技术生成

可以使用fwrite()将一个结构体写入文件:

fwrite(&some_struct,sizeof somestruct,1,fp);

对应的fread函数可以再把它读出来,此处fwrite受到一个结构的指针并把这个结构的内存映像作为字节流写入文件。sizeof操作符计算出结构占用的字节数。

但是这样用内存映像写出的数据文件却是不能够移植的,尤其是当结构中包含浮点成员或指针的时候。结构的内存布局跟机器和编译器都有关。不同的编译器可能使用不同数量的填充位,不同机器上基本类型的大小和字节顺序也不尽相同。因此,作为内存映像写出的结构在别的机器上(甚至是被别的编译器编译之后)不一定能被读回来。

同时注意如果结构包含任何指针(char*字符串或指向其他数据结构的指针),则只有指针值会被写入文件。当它们再次被读回来的时候可能已经失效。最后为了广泛的可移植性,你必需用“b”标志打开文件。

读写结构体的程序如下:

将结构体写入文件:

81178cc93a2a3bb5048d90d76e7ec935.png

69c5a8ac3fa60e0848d784a6dd461da6.png

#include 

#include 

typedef

struct {

char c;

int h;

short n;

long m;

float f;

double d1;

char *s;

double d2;

}st;

int main(

void)

{

FILE *fp;

st sa,sb;

char *str=

"

abcdefg

";

sa.c=

'

K

';

sa.h=-

3;

  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值