wie konvertiere ich korrekt: CString nach char*



  • Hallo, ich möchte aus dem Aufruf:

    CString strPath = GetCommandLine();
    

    den CString in einen char* oder const char* umwandeln
    um damit weiter arbeiten zu können.

    Ich dachte es wäre wie folgt möglich, aber der Inhalt
    des char* ist leer oder �.

    char* pStr = CT2A((LPCTSTR)strPath);
    


  • CString strPath = GetCommandLine();
    const char* pstr = strPath.GetString();
    

    GetString() gibt dir einen const char* zurück und folglich funktioniert die Zuweisung an einen char* nicht.



  • Kann es sein, dass ich dann dort an der Stelle so nicht weiter komme?

    Deiner Hilfe folgend meldet der Compiler für

    const char* pstr = strPath.GetString();
    

    'const wchar_t *' kann nicht in 'const char *' konvertiert werden

    So weit ich es nachgeforscht habe, ist das nun ein Problem mit der
    Verwendung von Unicode oder?



  • CString verwendet TCHAR, und TCHAR ist je nach Einstellung entweder char (MBCS) oder wchar_t (UNICODE).

    Ohne weitere Konvertierung kannst du also von einem CString nur einen const char* bekommen, wenn dein Projekt auf MBCS eingestellt ist.



  • Hallo Hustbaer,

    ich habe es auf Unicode stehen. Nachdem Wechsel auf MBZS traten an anderer
    Stelle (oh Wunder 🙂 andere Fehler auf.

    Ich würde es auf Unicode lassen, wenn da nichts besonderes gegen spricht
    (da fehlt mir einfach die Erfahrung, ich weiß :-/).

    Wir würde so eine Konvertierung unter Beibehaltung von Unicode im Zeichensatz
    aussehen? Könntest du mir da einen kurzen Einstieg/ Starthilfe geben?



  • Du kannst es auf Unicode stellen und die Zuweisung wie folgt schreiben:

    const TCHAR* pstr = strPath.GetString()
    

    Ich würde dir empfehlen jedes char in TCHAR zu ändern. Dann wird immer der richtige Typ gewählt.


  • Mod

    1. Du verwendest überall auch in Deiner Software TCHAR.
    2. Du verwendest eine Konvertierung wie CT2A
    3. Du verwendest direkt CStringA
    4. Du verwendest den Zeichensatz, den Du wirklich benötigst.



  • Martin hat ja schon eine umfangreiche Liste erstellt.

    Zwei Varianten würde ich bevorzugen:

    CString strPath = GetCommandLine();
    const TCHAR* pstr = strPath.GetString();
    

    oder:

    CStringA strPath = GetCommandLineA();
    const char* pstr = strPath.GetString();
    

Log in to reply