Komische Zeichen beim Lesen einer Textdatei



  • Ich tippe darauf, daß diese zusätzlich angezeigten Zeichen zufällig hinter dem per new reservierten Speicher liegen - und deshalb von C mitgenommen werden, wenn du sie verarbeitest. Reservier dir am besten ein Byte mehr und belg es mit 0, dann hast du ein definiertes Stringende:

    str=new TCHAR(len+1);
    d_ein.Read(str,len);
    str[len]=0;
    

    (PS: Übrigens fehl da noch ein "delete[]str;" am Ende deiner Funktion)



  • Danke, das wars.
    Ähh, das 0 entspricht eh dem Zeichen '\0' in ANSI C? Dort habe ich es zumindest immer mit '\0' gemacht.

    Mit dem delete[] hab ich ein kleines Problem, da ich str noch in einer anderen Funktion brauche. Habt ihr irgendeine Idee wie ich das lösen könnte!?

    Grüße,
    Harri



  • Du könntest das Array nicht in der Funktion, sondern als member der Klasse deklarieren. In der Funktion initialisierst Du es dann halt nur.

    Das delete machst Du dann entweder, wenn Du mit Deiner Verarbeitung fertig bist - oder im Destruktor der Klasse (da aber am besten sowieso). Und denk dran, es mit NULL zu initialisieren und im Destruktor drauf zu prüfen, bevor Du delete[] machst.



  • Ich hab TCHAR *str; sowieso als Member Variable deklarieret.
    Das mit dem Destruktor hätte ich sowieso auch machen wollen, konnte aber keinen Destruktor finden(ich hab mir das Projekt mit dem MFC Assistenten erstellen lassen). Den Konstruktor konnte ich finden, nicht aber den Destruktor. Wo befindet sich der!?

    Grüße,
    Harri



  • der Destruktor müsste

    CStrreplaceDlg::~CStrreplaceDlg()
    

    heissen, und sich in Deinem Header sowie Deiner Implementation befinden.



  • Diese Zeichen sind eigentlich Symbole aus dem Unicode.
    Ist es möglich,dass dein Textfile so abgespeichert ist?



  • Danach hab ich bereits gesucht, konnte ber nix finden.

    Füge ich die Destruktor manuell unterm Konstruktor hinzu, so gibt es folgende Fehlermeldung:
    function '__thiscall CStrreplaceDlg::~CStrreplaceDlg(void)' already has a body

    Anscheinend ist der Destruktor doch schon irgendwo vorhanden ,versteckt sich aber vor mir.(oder ich bin blind*g*)

    mfg
    harri



  • in der headerdatei schon den virtual ~CDestruktor
    eingefügt?



  • Gib doch mal CStrreplaceDlg::~CStrreplaceDlg() irgendwo im Code ein, und mach dann rechte maustaste -> Gehe zu Definition



  • Nö,findet er auch nicht.
    Aber anscheinend ist ein Destruktor vorhanden, sonst könnte ich ihn ja manuell einfügen.
    Merkürdig.

    Mit dem Thema C++ in Kombination mit MFC muss ich mich wohl noch mehr auseinandersetzen. Bis jetzt hab ich eher maschinennahe Programme für Mikroprozessoren in C geschrieben, der Unterschied zur Windowsprogrammierung ist doch größer als erwartet 😉

    Grüße,
    Harri


Anmelden zum Antworten