ifstream.tellg() mit g++ 3.4.5 erzeugt seltsamen Fehler ...



  • Ich habe eine Textdatei mit unterschiedlich langen Zeilen. Von dieser Datei will ich den Beginn in eine neue Datei schreiben. Die neue Datei soll nur ganze Zeilen der Ursprungsdatei enthalten.
    Mein Codestück sieht so aus:

    //Beginn der Datei schreiben
    	in.clear();
    	in.seekg(ios::beg);
    	unsigned int pos = 0;
    
    	getline(in, istr);
    
    	while(!in.eof() && pos < offset)
    	{
    		pos = in.tellg();
    		outbeg << istr << '\n';
    		getline(in, istr);
    	}
    

    wobei in vom Typ ifstream die Eingabedatei ist, outbeg vom Typ ofstream die Ausgabedatei, und offset ist die Anzahl Bytes, die mindestens gelesen werden soll.
    Wenn ich die Zeile
    pos = in.tellg();
    auskommentiere, läuft das wunderbar (natürlich bekomme ich dann aber die ganze Ursprungsdatei). So wie oben allerdings ist nur die erste Zeile vollständig, von den Folgezeilen werden jeweils am Zeilenbeginn ein paar Byte verschluckt, nicht immer dieselbe Anzahl, sondern unterschiedlich ...
    MS's cl.exe erzeugt aus dem Code das Programm, das ich erwarte, g++ (3.4.5 mingw special) erstellt ein Programm, das den geschilderten Fehler erzeugt.
    Hat da jemand evtl. eine Erklärung für?



  • Wenn es sich tatsächlich um einen g++ 3.4.5 handelt, ist der sehr alt. Da könnte es sich um einen Bug im Compiler handeln. Bei mingw gibt's doch auch schon neuere Version, warum benutzt du die nicht?



  • Mhm, ich hab irgendwann mal 'ne Version mit 4. irgendwas ausprobiert, aber die hat mir sehr sehr große Exe-Dateien erzeugt ...
    Mittlerweile benutze ich eigentlich eher VC++ Express ... ich entdecke eigentlich immer mal wieder Dinge, die sich damit weniger problematisch darstellen, als mit dem g++ (allerdings meine ich jetzt meine alte Version).


Anmelden zum Antworten