2012-12-13 64 views
1

我正在写一个函数来保存和加载链接列表作为二进制文件。当我尝试加载停止的函数时,该程序不会崩溃或冻结,但它不会继续超出指示的点:读取二进制返回垃圾

void fLoad(char* fname) 
{ 
    fstream fin; 
    fin.open(fname, fstream::in|fstream::binary); 

    if(fin.fail()) 
     { 
      cerr<<"unable to open file"; 
      exit(0); 
     } 
    cout<<"File open"; 

    fin.read((char*) &N, sizeof(int)); 
    cout<<N; 
    system("pause"); 
    for(int i=0;i<N;i++) 
    { 
     Clinked* current = new Clinked; 

     fin.write(current->site_name,sizeof(char)*100); 
     fin.write((char*) &current->cood_x,sizeof(double)); 
     fin.write((char*) &current->cood_y,sizeof(double)); 
     fin.write((char*) &current->dip,sizeof(double)); 
     fin.write((char*) &current->strike,sizeof(double)); 

     //fin.write((char*) current, sizeof(Clinked)); 

     current->next=start; 
     start=current; 
    } //at this point it stops 

    cout<<"\n"<<fname<<" was read succesfully"; 
    fin.close(); 
    cout<<endl; 
} 

这不是说N也是可笑的大;我查过

+8

目前还不清楚你的代码是否被读取或写入 - 你打开'的fstream :: in'模式,但调用'fin.write()'。这是你的意图吗? –

回答

1

正如评论中指出的那样,您使用的是write而不是read。您的代码可能会引发异常,请检查Debug > Exceptions菜单中的Break何时抛出异常。

我觉得你的代码应该如下:

void fLoad(char* fname) 
{ 
    fstream fin; 
    fin.open(fname, fstream::in|fstream::binary); 

    if(fin.fail()) 
    { 
     cerr<<"unable to open file"; 
     exit(0); 
    } 
    cout<<"File open"; 

    fin.read((char*) &N, sizeof(int)); 
    cout<<N; 
    system("pause"); 
    for(int i=0;i<N;i++) 
    { 
     Clinked* current = new Clinked; 

     fin.read(current->site_name,sizeof(char)*100); 
     fin.read((char*) &current->cood_x,sizeof(double)); 
     fin.read((char*) &current->cood_y,sizeof(double)); 
     fin.read((char*) &current->dip,sizeof(double)); 
     fin.read((char*) &current->strike,sizeof(double)); 

     //fin.read((char*) current, sizeof(Clinked)); 

     current->next=start; 
     start=current; 
    } //at this point it stops 

    cout<<"\n"<<fname<<" was read succesfully"; 
    fin.close(); 
    cout<<endl; 
}