2017-06-14 8 views
0

私は学校にTurbo C++を強制します。私は「STU」クラスのオブジェクトS1の大きさを保存するために長い変数を使用した場合DFH:fin.seekg()で奇妙な出力を与えるSizeof(Object);

void debugged_read() 
{ 
    clrscr(); 
    stu S1; 
    ifstream fin; 
    eof=false; 

    fin.open("CP2.dat", ios::binary); //Opens the file again 
    while(fin.eof() == false) { 
     cout<<"\n\n Initial location: "<<fin.tellg(); 
     fin.read((char*)& S1, sizeof(S1)); //Reads a Record into fin stream 
     S1.show(); 
     cout<<"\n\n After Read location: "<<fin.tellg(); 


     fin.read((char*)& S1, sizeof(S1)); //Reads the next record space for eof detection 
     cout<<"\n Check position: "<<fin.tellg(); 
     if(fin.eof() == true) { 
      cprintf("\nWARNING: End of file Incoming!"); 
      break; //Break on eof encounter 
     } 
     else { 
      fin.seekg(-(sizeof(S1)), ios :: cur); //File Pointer Correction 
      cout<<"\n File Pointer Corrected: "<<fin.tellg(); 
     } 
    } 
cout<<"\nRead Successful!"; 
fin.close(); 
} 

この機能は、予想される出力を返しました: はこちら機能です。 enter image description here

ですが、sizeof()を使用します。直接それは、この奇妙な出力を提供します:unsigned int

istream::readある enter image description here

答えて

1

sizeof戻りsize_tsigned int

+0

オーケーであるstreamsizeを期待し、私はその乱数を説明する方法を参照してください。しかし、なぜそれはまだ正常にファイルを読んだのですか? 'istream :: read'は標準関数の大部分であるので、かなり安全であり、読み込めませんが存在しないもののいくつかの警告フラグがセットされているので、ごみの値 –

+0

@ AlphaMineronを期待していました。 (チェックしてください)。参考資料を調べるのは良い習慣にしてください:) – Sam

+0

さて、私はそれをやり始めます。しかし、私はドキュメントを理解していないのは普通ですか?たとえば、あなたの答えにリンクしているcppreference.comのリンクは、ページのすべてを完全に理解することができませんでした。私はこれがちょうど初心者の闘いだと信じていますよね? –