2016-05-06 11 views
1

Ich versuche N feste Länge Datensatz vom Typ structSchreiben Feste Länge Datensätze in eine Datei C++

const int N = 101; 
char dummay[] = "#####"; 

struct hashTable 
{ 
    char name[51]; 
    int RRN; 
}; 
int main(){ 
    fstream f("hashFile.txt"); 
    f.seekp(0,ios::beg); 
    hashTable h; 
    for (int i = 0 ; i < N ; i++) { 
     strcpy(h.name,dummay); 
     h.RRN = i; 
     f.write((char*)&h,sizeof h); 
    } 

und wenn ich versuche, diese Datensätze wieder ausgeben, werden nur die ersten 25 Datensätze funktioniert gut zu schreiben !

f.seekp(0,ios::beg); 
for (int i = 0 ; i < N ; i++) 
{ 
    f.read((char*)&h,sizeof h); 
    cout << h.RRN << endl << h.name << endl; 
} 

die komplette code, warum dies geschieht und wie es zu lösen?

+0

Verwenden Sie die richtigen Variablennamen –

+0

Der Code, den Sie auf ideone zeigen, gibt mehr als 25 Datensätze korrekt aus. –

+0

nur 25 Datensätze sind korrekt auf meinem Computer, aber das Problem gelöst, siehe die erste Antwort. –

Antwort

2

Sie schreiben offensichtlich binäre Daten in Ihre Datei (das int, das Nullterminator im Namen und die 45 Müllzeichen, die dem Namen folgen könnten).

So öffnen Sie es in Binär-Modus und es wird gut funktionieren:

fstream f("hashFile.txt", ios::binary); 

Wenn die Datei im Textmodus zu lesen, je nach Betriebssystem, einige binären Zeichen könnten als Dateiende-Markierung interpretiert werden. Zum Beispiel Ctrl+Z on windows (die zufälligerweise ascii code sind)