把结构体存入txt文件中(打开是乱码),关闭程序,在运行时读取文件不能读取结构体中的数组值(z,)
把结构体存入txt文件中(打开是乱码),关闭程序,在运行时读取文件不能读取结构体中的数组值(z在线等,急!!)
把Hmm结构体存入txt文件中(打开是乱码),关闭程序,再运行时读取文件不能读取结构体中的数组值(z在线等,急!!)下面是我的代码
CMyDIPView::OnSave()
{
HMM Hmm;
Hmm.A=new double*[N];//分配内存并初始化数组
for(int i=0;i<N;i++)
Hmm.A[i]=new double[N];
Hmm.B=new double*[N];//分配内存并初始化数组
for( i=0;i<N;i++)
Hmm.B[i]=new double[M];
Hmm.PI=new double[N];
for( i=0;i<N;i++)
for(int j=0;j<N;j++)
Hmm.A[i][j]=A[i][j];
for(i=0;i<N;i++)
for(int t=0;t<M;t++)
Hmm.B[i][t]=B[i][t];
for(i=0;i<N;i++)
Hmm.PI[i]=PI[i];
Hmm.code1=Code1;
Hmm.code2=Code2;
tmpScount = sizeof(Hmm);//全局变量用于保存Hmm模型的字节个数
FILE *fp;
if((fp=fopen("C:\\text.txt","a+"))==NULL)
{
exit(0);
}
if(fwrite(&Hmm,sizeof(struct HMM),1,fp)!=1)
{ }
fclose(fp);
}
void CIdentify2::read()
{
// TODO: Add your control notification handler code here
HMM Hmm;
Hmm.A=new double*[N];//分配内存并初始化数组
for(int i=0;i<N;i++)
Hmm.A[i]=new double[N];
Hmm.B=new double*[N];//分配内存并初始化数组
for( i=0;i<N;i++)
Hmm.B[i]=new double[M];
Hmm.PI=new double[N];
double Probability ;
double **DELTA=new double*[TT3];//分配内存并初始化数组
for(int t=0;t<TT3;t++)
DELTA[t]=new double[N];
int **PSI=new int*[TT3];
for(t=0;t<TT3;t++)
PSI[t]=new int[N];
struct BHMM{
char code1;
char code2;
double Probability;
}BHmm[100];
int k=0;
char c1;
char c2;
tmpScount = sizeof(Hmm);
FILE *fp; //读文件
if((fp=fopen("C:\\text.txt","rb"))==NULL)//打开文件
{
exit(0);
}
fseek(fp,0,SEEK_END); //定位到文件末
int nFileLen = ftell(fp); //文件长度
int tmpCount1 = nFileLen / tmpScount ; //文件中结构体个数
if(tmpCount1!=0)
{
for(i=0; i<tmpCount1; i++)
{
fseek(fp,tmpScount*i,SEEK_SET);
if(fread(&Hmm,sizeof(struct HMM),1,fp)!=1)
{
AfxMessageBox("1");
}
ViterbiLog(OBB,DELTA,PSI,Probability,Hmm.B,Hmm.A,Hmm.PI, N,TT3);//HMM.A,B,PI有问题
BHmm[k].code1=Hmm.code1;
BHmm[k].code2=Hmm.code2;
BHmm[k].Probability=Probability;
k++;
}
}
}
------解决方案--------------------
这个肯定不行。Hmm里有指针。
把Hmm结构体存入txt文件中(打开是乱码),关闭程序,再运行时读取文件不能读取结构体中的数组值(z在线等,急!!)下面是我的代码
CMyDIPView::OnSave()
{
HMM Hmm;
Hmm.A=new double*[N];//分配内存并初始化数组
for(int i=0;i<N;i++)
Hmm.A[i]=new double[N];
Hmm.B=new double*[N];//分配内存并初始化数组
for( i=0;i<N;i++)
Hmm.B[i]=new double[M];
Hmm.PI=new double[N];
for( i=0;i<N;i++)
for(int j=0;j<N;j++)
Hmm.A[i][j]=A[i][j];
for(i=0;i<N;i++)
for(int t=0;t<M;t++)
Hmm.B[i][t]=B[i][t];
for(i=0;i<N;i++)
Hmm.PI[i]=PI[i];
Hmm.code1=Code1;
Hmm.code2=Code2;
tmpScount = sizeof(Hmm);//全局变量用于保存Hmm模型的字节个数
FILE *fp;
if((fp=fopen("C:\\text.txt","a+"))==NULL)
{
exit(0);
}
if(fwrite(&Hmm,sizeof(struct HMM),1,fp)!=1)
{ }
fclose(fp);
}
void CIdentify2::read()
{
// TODO: Add your control notification handler code here
HMM Hmm;
Hmm.A=new double*[N];//分配内存并初始化数组
for(int i=0;i<N;i++)
Hmm.A[i]=new double[N];
Hmm.B=new double*[N];//分配内存并初始化数组
for( i=0;i<N;i++)
Hmm.B[i]=new double[M];
Hmm.PI=new double[N];
double Probability ;
double **DELTA=new double*[TT3];//分配内存并初始化数组
for(int t=0;t<TT3;t++)
DELTA[t]=new double[N];
int **PSI=new int*[TT3];
for(t=0;t<TT3;t++)
PSI[t]=new int[N];
struct BHMM{
char code1;
char code2;
double Probability;
}BHmm[100];
int k=0;
char c1;
char c2;
tmpScount = sizeof(Hmm);
FILE *fp; //读文件
if((fp=fopen("C:\\text.txt","rb"))==NULL)//打开文件
{
exit(0);
}
fseek(fp,0,SEEK_END); //定位到文件末
int nFileLen = ftell(fp); //文件长度
int tmpCount1 = nFileLen / tmpScount ; //文件中结构体个数
if(tmpCount1!=0)
{
for(i=0; i<tmpCount1; i++)
{
fseek(fp,tmpScount*i,SEEK_SET);
if(fread(&Hmm,sizeof(struct HMM),1,fp)!=1)
{
AfxMessageBox("1");
}
ViterbiLog(OBB,DELTA,PSI,Probability,Hmm.B,Hmm.A,Hmm.PI, N,TT3);//HMM.A,B,PI有问题
BHmm[k].code1=Hmm.code1;
BHmm[k].code2=Hmm.code2;
BHmm[k].Probability=Probability;
k++;
}
}
}
------解决方案--------------------
这个肯定不行。Hmm里有指针。