CString zu LPTSTR konvertieren
-
Hallo
Ich möchte von CString zu LPTSTR konvertieren und finde in folgender Funktion keinen Fehler:LPTSTR text=NULL; int len=str.GetLength(); TCHAR* buffer=new TCHAR[len)]; for(int i=0;i<=len;i++) { buffer[i]=str.GetAt(i); } text=finbuffer; MessageBox(text); delete [] buffer;
Der String wird korrekt angezeigt, aber der Debugger meldet : HEAP CORRUPTION DETECTED ... , nach der Messagebox.(Prog stürzt nicht ab)
Also stimmt irgendwas mit delete nichtIm Release Modus klappt alles wunderbar
-
Mich iritiert die Klammer:
TCHAR[len)]
Und mach mal
i<len
sonst rennt der über die Grenze!
-
Vor allem benötigst du Platz für ein Zeichen mehr als dir GetLength() ausspuckt, um den Null-Terminator darin unterzubringen (der wird üblicherweise nicht mitgezählt, wird allerdings von den üblichen Stringverarbeitungs-Funktionen benötigt).
-
Danke für die Antworten.
So klappt es jetztint len=str.GetLength()+1; TCHAR* buffer=new TCHAR[len]; for(int i=0;i<len;i++) { buffer[i]=str.GetAt(i); } text=buffer; MessageBox(text); delete [] finbuffer;
-
sollte das nicht automatisch gehen? ich glaube, CString stellt eine konversion zur verfügung:
LPCSTR xy = (LPCSTR)cstring;
versuchs mal, vielleicht klappts ja, dann bist du das los
-
Wozu benötigst du eigentlich noch eine zusätzliche Variable? Schreib doch gleich "MessageBox(buffer);".
PS: Da MessageBox auch mit einem konstanten Pointer leben kann, ist die ganze Umwandelei nur unnötige Zeitverschwendung:
MessageBox(str);
-
MessageBox ... ? Ah, gar nicht gelesen
Klar, das ist am einfachsten!
-
Ich meinte nicht LPCSTR sondern LPTSTR.
Und das mit MessageBox ist nur ein Test
-
Hallo,
das geht schon, auch mit LPTSTR, ich meine die Umwandlung von CString nach LPTSTR.CString csTest = "Forum"; LPTSTR szTest; szTest = (LPTSTR&) csTest; AfxMessageBox(szTest); // Testausgabe!
Oder hab ich das was falsch verstanden??
mfg
pixel
-
es sollte im allgemeinen am geschicktesten sein, die makros bzw. eingebaute funktionalität der mfc-klassen zu verwenden. sonst kommst du irgendwann in echte schwulitäten - stichwort unicode, etc. es sei denn, du hast tatsächlich volle kontrolle über den gesamten erzeugungsprozess der von dir verwendeten strings.
und wenn dir die klassen schon die konversionen abnehmen - warum dann noch mit den byte-werten rumschlagen?