Chargrösse mit malloc verursacht zusätzliche Zeichen
-
Hallo, beim Auslesen einer Datei kommt es zu einem kleinen Problem.
char testchar; void *testptr = &testchar; testptr = (char*) malloc (ausgelesene_dateigrösse); wxFile->Read((char*)testptr, ausgelesene_dateigrösse); wxLabel->SetLabel(wxT((char*)testptr));Wenn ich die Datei so auslese, werden einige < hinten drangehängt bei der Ausgabe. Wenn ich die Zeile mit dem malloc weg lasse und beispielsweise
char testchar[200]
oder sowas eingebe, bleiben die < weg. Dabei ist es egal ob ich char oder wxChar verwende.Das ganze wird in VC++ 2008 Express unter Verwendung von wxWidgets geschrieben.
Kann mir da vielleicht irgendwer sagen wo die < herkommen und wie ich sie weg bekomme? Würde doch ganz gerne ne dynamische char grösse verwenden.Danke schonmal im vorraus, ich hoffe ich hab bei der Suche ncihts übersehen und ich hab alle nötigen Infos beigelegt.
-
mallocist C, nicht C++.std::vector<char>ist C++. Wenn es denn unbedingt sein muss und einen guten Grund gibt, auchnew[].Ursache des Problems: String hören mit \0 auf. Du musst ein Zeichen mehr reservieren, und am Ende eine abschließende 0 reinschreiben.
Edit: und das bekloppte Hin-und-her-Casten ergibt auch keinerlei Sinn.
-
Versuchs mal bei malloc mit ausgelesene_dateigroesse+1
Das ist übrigens kein C++, was du da machst, sondern C mit irgendeinem Framework (wxWidgets?)
edit: Oh, viel zu langsam...
-
Also um einen erhöhen bringt nichts. Ich hab auch eine 0 hinten angefügt, diese erscheint sogar noch hinter den <.Wenn ich \0 anfüge wird zumindest keine 0 mehr angezeigt, aber die < verschwinden trotzdem nicht.
Die ausgelesene Dateigrösse ist in diesem Fall 263, bei einer Deklaration von
char testchar[263]
oder
char testchar[264]
gibt es keinerlei Probleme.std::vector denke ich mal nutze ich Falsch, da bekomme ich entweder Fehlermeldungen, oder Programmabstürze *schäm*
wxWidgets sind mehrere Bibliotheken für C++, die sich hauptsächlich damit beschäftigen die GUI-Bildung stark zu vereinfachen. Ist ne sehr interessante Sache wie ich finde.
@Troll was meinst du mit dem Hin-und-her-Casten?
-
Cargon schrieb:
Also um einen erhöhen bringt nichts.
#include <vector> std::vector<char> testchar(ausgelesene_dateigrösse + 1, 0); wxFile->Read(&testchar[0], ausgelesene_dateigrösse); wxLabel->SetLabel(&testchar[0]);@Troll was meinst du mit dem Hin-und-her-Casten?
Deine Konstruktion von char nach void* nach char*.
-
Registrierter Troll schrieb:
Cargon schrieb:
Also um einen erhöhen bringt nichts.
#include <vector> std::vector<char> testchar(ausgelesene_dateigrösse + 1, 0); wxFile->Read(&testchar[0], ausgelesene_dateigrösse); wxLabel->SetLabel(&testchar[0]);@Troll was meinst du mit dem Hin-und-her-Casten?
Deine Konstruktion von char nach void* nach char*.
Danke dir, das funktioniert wunderbar. Das Casten dachte ich wäre nötig, da wxFile->Read() nen void* erwartet. Aber mit &testchar[0] läuft das ganze blendend.
Lag am Falsch verwendeten std::vector.