C语言对结构体文件的读取

来源:百度知道 编辑:UC知道 时间:2024/06/15 17:14:23
现在只知道一个文件存取数据的时候是用的这个结构体(他的两成员变量都是指针类型的.
)
typedef struct TEST
{
char* ch;
char* cha;
}TESTFEI;

现在要读取这个文件中的数据,应该怎么办呢?
TESTFEI sDHTInfo;
sDHTInfo.ch = new char;
sDHTInfo.cha = new char;
int iCount = fread(sDHTInfo, sizeof(TESTFEI ), 1, pfDHT);
delete......
这样的话读不出来,我跟了一下,是乱码.

这样的思路是:文件打开后它的数据就存在内存了,给结构体的指针变量分配内存后,这个指针就有了地址,然后用fread读取数据后,放到用new分配的内存里.

FILE* pfDHT = NULL;
// DHT文件信息结构体
TESTFEI sDHTInfo;
pfDHT = fopen("96w164_2d_700.dht", "r");
// 文件打开成功
if (NULL != pfDHT)
{
// 主要是这里应该怎么往下做
// 当然在读数据的时候不一定要用到上面那个结构体,
// 请用代码说吧,用文字说不清楚。
int iCount = fread(&sDHTInfo, sizeof(dhtfds), 1, pfDHT);
}

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

  • 函数说明:

           #include <stdio.h>

           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中。

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

    因为,指针变量中存储的是内存地址,而程序在不同环境运行时,所使用的内存地址是不同的,