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