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-full

    In 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.


Anmelden zum Antworten