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
    Test

    wird kopiert in
    Test2.txt

    Test@@@@^@.......

    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.


Anmelden zum Antworten