struct a{
int id;
short val[Num];//
};一个自定义文件,文件第一个数据为一个int,int的值为上面这个结构体a中的Num的值,这个值每个文件不一样,结构体a就是这个文件的每条数据的结构定义。我现在要写一个程序把这个文件的某些参数提取出来,我该怎么做比较好呢。
要先定义好一个准确的结构体才能读取文件中的数据啊。
我是这样做的
int n;
file.read(&n,sizeof(int));
struct a
{
int id;
short val[n];
}这样编译都通不过,那该如何做才比较好呢。请知道的指点一下。
int id;
short val[Num];//
};一个自定义文件,文件第一个数据为一个int,int的值为上面这个结构体a中的Num的值,这个值每个文件不一样,结构体a就是这个文件的每条数据的结构定义。我现在要写一个程序把这个文件的某些参数提取出来,我该怎么做比较好呢。
要先定义好一个准确的结构体才能读取文件中的数据啊。
我是这样做的
int n;
file.read(&n,sizeof(int));
struct a
{
int id;
short val[n];
}这样编译都通不过,那该如何做才比较好呢。请知道的指点一下。
不好意思,写错了,是这样的,file.read()我就示意了一下意思,
就是说
struct a{
int id;
short val[Num];//
};
这个结构体,必须读出文件第一个int后才能确定大小。
然后
a val;
file.read(&val,sizeof(a));这样读。
但是我们知道
struct a{
int id;
short val[Num];//
};
这样定义是编译不能通过的。现在是想找个解决方法。
#include <fstream>
using namespace std;struct a
{
int id;
short val[0];
};void main()
{
ifstream fileIn("test.txt");
int iLen, i;
fileIn >> iLen;
a* pA = (a*) new char[sizeof(a) + iLen*sizeof(short)];
for(i = 0; i<iLen; i++)
fileIn >> pA->val[i]; // 显示
for(i = 0; i<iLen; i++)
cout << pA->val[i] << endl;
}
在网上也搜到说要动态的分配结构体大小,但是一直没找到正确的方法。
另外我定义的不是文件流ifstream ,而是一个CFile Fil;Fil.read(&val,sizeof(val));//我想这样循环的一条一条的读
我那段代码能直接运行
test.txt的内容可以是:
3
1
2
3
File.read这个读取方法还要看你的文件时怎么存的呢。不好整
文件开头是一个int比如值为Num,后面跟的就是一条一条的数据,数据结构如下:
struct a
{
int id;
short val[Num];
};
排列的吗? for(i = 0; i<iLen; i++)
file.read(&pA->val[i], sizeof(short));试试这样
不是,相当于文件是这样排列的
int //文件最前面的4个字节
int //id 值
short short short。。
int //id 值
short short short。。
int //id 值
short short short。。
int //id 值
short short short。。
。。
就是除了最前面的4个字节是一个整数(Num)外,后面的数据结构就是
struct a
{
int id;
short val[Num];
};
就是这样的,
如果这样那么这个文件里的所有结构都是一样大小的吧
file.read(&n,sizeof(int));
struct a
{
int id;
short val[n];
}可以用变量定义数组大小的么?
int iLen, i;
file.Read(&iLen, sizeof(int));
a* pA = (a*)new char[sizeof(int)+iLen*sizeof(short)];
for(i = 0; i<iLen; i++)
file.Read(&pA->val[i], sizeof(short));