2017-06-14 2 views
0

Bare mit mir, meine Schule zwingt mich, Turbo C++ zu verwenden. Hier ist die Funktion :DFH: Sizeof (Objekt) gibt seltsame Ausgabe mit fin.seekg();

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(); 
} 

dieser Funktion zurück einen erwarteten Ausgang, wenn ich eine lange Variable verwendet zum Speichern der Größe des Objekts S1 von ‚STU‘ -Klasse. enter image description here

aber mit der sizeof(); direkt es diese seltsame Ausgang gibt: enter image description here

Antwort

1

sizeof kehrt size_t die istream::readunsigned int

ist erwartet streamsize die signed int

+0

in Ordnung, ich sehe, wie das erklärt, dass Zufallszahl. Aber warum hat es die Datei immer noch normal gelesen? Ich erwartete einige Garbage-Werte –

+0

@AlphaMineron, weil 'istreamream_read', wie die Mehrheit der Standardfunktionen, ist ziemlich gut gesichert und es liest nicht, dass nicht existiert, sondern setzt einige Warnflags, die Sie können (und sollte) überprüfen. Mach dir einfach eine gute Angewohnheit, in die Referenzdokumentation zu schauen :) – Sam

+0

Okay, ich werde damit anfangen. Ist es normal, dass ich die Dokumentation nicht verstehe? Zum Beispiel die cppreference.com-Links, die Sie in Ihrer Antwort verlinkt haben, konnte ich nicht alles auf der Seite vollständig verstehen. Ich glaube, das ist nur der Kampf der Anfänger, oder? –