getline() - speichert er nach dem lesen die Zeigerposition?



  • Hallo, ich nochmal!

    Kann mir jemand sagen, wenn ich mit getline einen Stream bis zu einem Trennzeichen einlese, merkt er sich dann die Position des Zeigers, oder muss ich diesen mit ios:cur neu setzen um von dort aus weiter einzulesen? Ich hab das sonst immer so gemacht:

    Datei.seekg(0,ios::cur);
    Datei.getline(array[i].invent,10,' ');
    Datei.seekg(0,ios::cur);
    Datei.getline(array[i].name,20,' ');
    Datei.seekg(0,ios::cur);
    Datei.getline(array[i].zahl,10,'\n');
    

    Aber jetzt denk ich, dass getline sich die Zeigerposition merkt, sodass ich den Zeiger nicht neu setzen muss. Und vor allem, wo setzt er dann den Zeiger hin, auf das Trennzeichen, oder eins weiter?



  • wo genau der danach zeigt weiß ich leider nich

    aber wenn man zweimal hintereinander getline ausführt
    geht er beim zweiten mal in die nächste zeile
    also muss man dass nich extra definieren



    1. er setzt den "Zeiger" hinter das Trennzeichen. Allerdings kann man bei streams wohl kaum von einem echten zeiger im herkömmlichen Sinne reden. Streams arbeiten auf buffern, wenn du z.B. deinen Dateistream öffnest, ist der Buffer anfangs leer. Wenn du dann liest (sagen wir 10 Zeichen), dann wird zuerst der buffer gefüllt und dann die ersten 10 zeichen ausgegeben. beim weiteren Lesen wird einfach weiter aus dem buffer gelesen. AFAIK führt ein seek allerdings dazu, dass der buffer geleert und evtl. neu gefüllt wird, weil im allgemeinen die zeichen nicht mehr der Stelle in dr Datei entsprechen, an der man sich jetzt angeblich befindet. seek dürfte also nicht nur überflüssig sein sondern dich auch zusätzliche performance kosten

Anmelden zum Antworten