t_str c_str Konvertieren in char*
-
Hallo zusammen,
ich habe mir das C++ Builder XE2 gegönnt und wie bisher bei jedem update des Compilers werden unmengen an Fehlermeldung ausgespuckt und die Projekte lassen sich nicht mehr Compilieren.
Nun zu meiner Frage:
Wieso wird immer am String etwas geändert? Beim wechsel von builder 2007 nach 2010 musste ich die Datentypen ändern und jetzt schon wieder.
Um einen String an char* zu übergeben habe ich bis jetzt immer t_str genutzt. t_str gibt mir jetzt aber auch nur noch wchar* zurück. Wodrin besteht denn jetzt der unterschied zwischen c_str, w_str und t_str?? Und was viel wichtiger ist, wie wandel ich jetzt String in char* um ohne immer zu casten bzw ohne alle meine Projekte wieder ändern zu müssen.
Fehlermeldung ist übrigens:
[BCC32 Fehler] TSerial.cpp(146): E2034 Konvertierung von 'wchar_t *' nach 'const char *' nicht möglich
Code:
BuildCommDCB(LPDef.t_str(), &dcbCommPort);
Danke schonmal für das feedback
-
Hallo,
meines Wissens nach wurde zwischen 2010 und XE2 nichts an den Strings geändert.
Zu t_str hatten wir hier alle eine ähnliche Meinung
http://www.c-plusplus.net/forum/251272-fullIn einem normalen Windows Unicode Projekt sollte BuildCommDCB einen wchar_t* erwarten, keinen char*. Steht in deinem Projekt das TCHAR Mapping in den Projekteinstellungen auf char ?
-
Fragemann123 schrieb:
Um einen String an char* zu übergeben habe ich bis jetzt immer t_str genutzt.
Das war die schlechtestmögliche Lösung, und die ist jetzt glücklicherweise nicht mehr erlaubt (cf. http://www.c-plusplus.net/forum/273679).
Wenn du unbedingt einen temporären (!) const char* brauchst, dann mache das:AnsiString (myString).c_str ()
Aber sei dir bewußt, daß jede dieser Umwandlungen datenverlustbehaftet ist. Und wie nn schreibt, ist es bei der Interaktion mit dem Windows-API überhaupt nicht nötig, wenn du das Projekt richtig konfigurierst.
Fragemann123 schrieb:
Wodrin besteht denn jetzt der unterschied zwischen c_str, w_str und t_str??
Du benutzt grundsätzlich nur c_str() und läßt die anderen links liegen, sie erfüllen heute keinen Zweck mehr.