Komische Zeichen mit fstream
-
Hi!
so..Programmiere schon seit einiger Zeit mit C++...War zwar vor kurzer Zeit in einer Art "Sommerloch"
aber jetzt lern ich wieder fleissig weiter...
Ich arbeite mit dem Buch "C++ Lernen und professionell anwenden"..
Bin jetzt bei Dateiverarbeitung..
Wenn ich Programm schreibe, welche Dateien mit read() und write() blockweise überträgt, erscheinen noch neben dem Text noch viele "^@'s"..also:
Test1.txt
Testwird kopiert in
Test2.txtTest@@@@^@.......
Meine Kopie-Funktion sieht wie folgt aus:
void copy( istream& is, ostream& os) { char* buf; buf = new char [1024]; is.read(buf, 1024); os.write(buf, 1024); }
Wenn ich das aber mit einer Kopie-Funktion kopiere, ist der Text normal kopiert:
[CODE]
void copy/ istream& ist, ostream&, os)
{
char c;
while( is.get(c) )
os.put(c);
}woran kann das liegen??
mfg VitaminC++
-
Dein Buffer 'buf' ist höchstwahrscheinlich nicht nullterminiert. Um eben dieses zu tun, sollte ein
buf[ anzahlGeleseneZeichen ] = 0;
genügen.
cypoc
-
Ob strlen bei nem nicht nullterminierten String hilft wage ich jetzt mal zu bezweifeln
Du musst den Rückgabewert von read auswerten und danach nullterminieren. Oder Du benutzt ihn, um einen std::string direkt zuzuschneiden, geht dann auch ohne nullterminierung (wenn Du write die korrekte Größe übergibst natürlich)
-
LordJaxom schrieb:
Ob strlen bei nem nicht nullterminierten String hilft wage ich jetzt mal zu bezweifeln
Das ist wohl wahr.
Werd das mal oben weg machen, damit sich das niemand abguckt.