Unterschied zwischen getline() und read()



  • Hallo zusammen!

    Ich bin was C++ betrifft ziemlich am Anfang und habe dementsprechend auch eine absolute Anfängerfrage, auf die ich bisher aber noch keine Antwort gefunden habe:

    Ich habe folgenden Code

    char puffer[]="hier ein paar zeichen um den puffer auf die richtige größe zu bekommen"	 
    ifstream f2("output.txt");
    [b]f2.getline(puffer,sizeof(f2)/sizeof(char)),EOF);[/b]
    [i][b]//f2.read(puffer,sizeof(f2)/sizeof(char));[/b][/i]
    f2.close();     
    
    ofstream f1("output.txt");;
    f1 << puffer << " noch mehr Text \n";
    f1.close();
    

    Ich möchte also eine Datei öffnen, ihren Inhalt in ein C-String einlesen, die Datei wieder schließen, erneut öffnen und den ursprünglichen Inhalt und neue Daten in die Datei schreiben. Benutze ich wie im Beispiel f2.getline() funktioniert alles. Versuche ich es jedoch mit read(), so wird die alte Datei überschrieben... Aus meinem Buch ("C++ von A bis Z" von Jürgen Wolf) geht das leider nicht klar hervor..
    Wo liegt denn der Unterschied zwischen read() und getline()?



  • schau mal was in deinem buch über sizeof steht



  • jo, ist mir auch gerade aufgefallen, ändert aber nix...



  • Das Problem liegt bei der Verwendung von sizeof( f2 )
    Der Rückgabewert ist die Größe der Klasse ifstream -> 140

    f2.getline(puffer,sizeof(f2),EOF);
    -> du versuchst 140 Zeichen von f2 zu lesen, oder hörst auf wenn EOF kommt. Scheinbar sind in deiner Datei weniger als 140 Zeichen drinnen und es klappt alles.

    f2.read(puffer,sizeof(f2));
    -> du versuchts auf Biegen und Brechen 140 Zeichen zu lesen, scheinbar geht der stream dabei kaputt oder du liest mist.

    Versuche es doch einmal mit:
    char puffer[120] = { 0 };
    f2.read( puffer, sizeof( puffer ) );

    das sollte funktionieren - zumindestens bei mir.



  • tausend dank!
    habs verstanden, muss erst langsam lernen wie ein Computer zu denken und nich wie ein normaler Mensch 🙂


Anmelden zum Antworten