C++ Dynamische Speicherverwaltung
Insanity
- programmiertechnik
Hallo,
immer mal was neues hab ich mir gedacht, deswegen hier mein Problem:
Ich Programmiere unter Windows, ich hab ein "edit"-Fenster aus dem ich etwas auslesen will. Tue ich natürlich mit SendMessage(...,EM_GETLINE,...). Den Inhalt des Fensters will ich jetzt in einem Puffer speichern der Dynamisch erstellt wird also mit
pszPuffer = new TCHAR[anzahl_zeichen_in_reihe];
Wenn ich diesen Puffer jetzt allerdings ausgebe bekomme ich zwar die Nachricht aber auch jede Menge Zeichenmüll...
Irgendjemand eine Idee was ich Falsch mache?
Greetz Insanity
Hallo »Insanity«,
Wenn ich diesen Puffer jetzt allerdings ausgebe bekomme ich zwar die Nachricht aber auch jede Menge Zeichenmüll...
Irgendjemand eine Idee was ich Falsch mache?
Nun ja, normalerweise werden Zeichenketten in C/C++ mit dem Zeichen mit dem ASCII-Code 0 abgeschlossen, so weiß ein C/C++-Programm, wo die Zeichenkette aufhört. Wenn das Zeichen nicht vorhanden ist, dann wird munter im Speicher weitergelesen bis so ein Zeichen auftritt oder das Programm abstürzt. (allgemeine Schutzverletzung)
Sowie ich das sehen kann 3 mögliche Ursachen:
1. Die Funktion, die die Nachricht in die Zeichenkette schreibt das Abschlusszeichen nicht in die Zeichenkette mit hinein. Das müßtest Du dann manuell übernehmen. (pszPuffer[laenge] = '\0'; - aber Achtung: laenge musst Du anderswo herbekommen, denn strlen o.ä. suchen nach dem 0-Byte, dass Du ja erst einfügen willst)
2. Mit pszPuffer = new TCHAR[anzahl_zeichen_in_reihe]; erzeugst Du ja den Puffer. Dieser Puffer ist vielleicht aber auch genau ein Zeichen zu wenig, den müßtest Du genau um eines größer machen - schließlich muss er ja auch das Null-Byte fassen.
3. Beides zusammen.
Christian
P.S.: Eigentlich ist das hier ja ein Webentwicklungsforum. ;-)
Danke für die Antwort, ich hab glaub ich die Lösung selbst gefunden...
Die Funktion die ich benutze um herauszufinden wie groß ich den Buffer machen muss, gibt die Gesamtzahl an Zeichen einer Reihe wieder und nicht nur die Anzahl der Zeichen die wirklich in dieser Reihe stehen... Deswegen ist der Rest der nicht selbst getippt wurde nur Müll...
Na ja ich benutze jetzt andere Funktionen mit denen das auch Ordentlich klappt...
Danke für die Antwort!
Greetz Insanity
P.S.:
Das fertige Programm wird ein InstantMessenger also hats was mit Webentwicklung zu tun :P