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

现在只知道一个文件存取数据的时候是用的这个结构体(他的两成员变量都是指针类型的.)typedefstructTEST{char*ch;char*cha;}TESTFEI;... 现在只知道一个文件存取数据的时候是用的这个结构体(他的两成员变量都是指针类型的.
)
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);
}
展开
 我来答
kaixingui2012
2015-09-27 · TA获得超过4.2万个赞
知道大有可为答主
回答量:1.4万
采纳率:81%
帮助的人:6386万
展开全部
  • 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中。

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

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

百度网友e9042513a
2009-03-05 · TA获得超过6984个赞
知道大有可为答主
回答量:2388
采纳率:0%
帮助的人:3500万
展开全部
这个结构体

typedef struct TEST
{
char* ch;
char* cha;
}TESTFEI;

按读取文件要求来说,本身就有问题
char* ch;
char* cha;

ch,cha 是 char 指针 ,应该是char数组
还是在读取文件之前分配了空间???

写个例子

typedef struct TEST
{
char ch[20];
char cha[10];
}TESTFEI;

long ReadBData(TESTFEI* Record, const char* szFileName)
{
FILE *stream;
long total;

if (NULL == (stream = fopen(szFileName, "rb+")))
{
return 0L;
}

total = filelength(fileno(stream)) / sizeof(TESTFEI);
fseek(stream, 0L, SEEK_SET);//移动文件指针到开始
fread(Record, sizeof(TESTFEI), total, stream);
fclose(stream);

return total;
}

函数返回读取的记录数
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
jaycnvip
2009-03-05 · TA获得超过767个赞
知道小有建树答主
回答量:998
采纳率:100%
帮助的人:641万
展开全部
既然给你的是指针,那么就利用这个指针读取字符啊,比如:
char* temp=ch;
while('\0'!=*temp){
//补充你的操作
}
这样的好处是不会改变结构体内指针的值。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友fb85a79
2009-03-05 · TA获得超过2600个赞
知道小有建树答主
回答量:684
采纳率:0%
帮助的人:314万
展开全部
这个哪是一般的指针呀,字符指针就是字符串呀,按字符串读就可以了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式