关于c语言中结构体和文件读取输出问题

2024-12-01 20:01:43
推荐回答(3个)
回答1:

  • C语言中对结构体数据格式文件进行读取时,必须以二进制格式打开文件,然后按结构体类型变量内存块方式进行数据读取,相关读数据命令为fread()。

  • 函数说明:

           #include 

           size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);

            从stream文件流中,读取nmemb个size大小的数据块到ptr所指的内存buf中,返回读取到的有效数据块数。

  • 如,有如下结构体定义:

    typedef struct TEST 

        int num;

        double score;

    }STRTEST;

    STRTEST data ;

    FILE *fp = fopen("file.dat", "rb" ) ; //按二进制格式打开文件

    int n=fread( &data, sizeof(STRTEST), 1, fp ); //读取一个数据块到变量data中。

  • 注意,当结构体中定义的变量有指针类型时,在存储数据时,就不能按结构体进行存储了。

    因为,指针变量中存储的是内存地址,而程序在不同环境运行时,所使用的内存地址是不同的,只存储内存地址,不能把真正的数据保存下来,所以,即使是正确读取到文件内容,也不能得到当时的结构体内存数据。因而,在存储结构体数据时,要根据结构体类型变量特点采用正确的方法进行存储,才能正确的读取。

回答2:

C中结构体在内存中的存储有字节对齐问题,一般情况下为四的倍数,也有的是8的倍数。有空去网上看一下关于结构体存储的相关文章吧!!
你用sizeof命令去输出结构体变量的大小就会看到这个现象了!

对于文件中的内容,你当时是怎么写的就要去怎样读才能 保证 正确的得到结果!!

回答3:

当然要错 改成
fread(stu,sizeof(stu),1,fp);
一个读数据是读一条结构体的数据进去 不能分开读