std::string in Windows-Anwendungen



  • Hi,
    mal eine Frage an die C++ (nicht C)-Programmierer: Ist es gut, in WinAPI-Programmen den std::string für Zeichenketten zu benutzen oder sollte man doch lieber auf das Windows-eigene LPCTSTR und Konsorten zurückgreifen?



  • Rüdiger P. schrieb:

    Hi,
    mal eine Frage an die C++ (nicht C)-Programmierer: Ist es gut, in WinAPI-Programmen den std::string für Zeichenketten zu benutzen oder sollte man doch lieber auf das Windows-eigene LPCTSTR und Konsorten zurückgreifen?

    LPCTSTR ist das selbe wie char*. Wenn du std::string verwendest musst du unter umständen casten, aber deine Programme sollten sicherer werden, da Speicherprobleme mit Strings mit std::string auszuschließen sind.



  • Irgendwie war mir mal so, dass einfache C-Strings (char 😉 eine andere Art Zeichensatz benutzen als std::string. Stimmt das oder verwechsle ich hier was?



  • Mit
    einString.c_str()
    kriegst du den char* array raus, nix casten.

    Zeichensätze:
    string -> char* -> LPCSTR
    wstring -> wchar* -> LPCWSTR
    typedef std::basic_string<TCHAR> tstring -> TCHAR* -> LPCTSTR



  • 1310-Logik schrieb:

    nix casten

    Ich wusste nicht, ob LPCSTR nicht unsigned ist und man ohne Casts vielleicht Compiler Warnings bekommt... Desswegen das casten...



  • casts sollte man prinzipiell vermeiden und deuten meistens auf Fehler hin.



  • 1310-Logik schrieb:

    Mit
    einString.c_str()
    kriegst du den char* array raus, nix casten.

    Nicht ganz, man bekommt einen const char*. Dass sollte man immer im Hinterkopf bewahren wenn man den String an eine Funktion übergibt die ihn verändern soll ;).

    mfg tobZel



  • tobZel schrieb:

    1310-Logik schrieb:

    Mit
    einString.c_str()
    kriegst du den char* array raus, nix casten.

    Nicht ganz, man bekommt einen const char*. Dass sollte man immer im Hinterkopf bewahren wenn man den String an eine Funktion übergibt die ihn verändern soll ;).

    mfg tobZel

    Jaja, aber LPC*STR heisst doch Long Pointer to a Const whatever STRing...


Anmelden zum Antworten