L" string " -> Variable innerhalb angeben ?!
-
Was ist L"..."?: Wide string literal. The type of a L"..." string literal is const wchar_t[N], where N is the size of the string in code units of the execution wide encoding, including the null terminator.
Daraus folgt: du kannst std::wstring verwenden:
#include <string> #include <iostream> int main() { std::wstring s = L"Hallo "; s += std::to_wstring(42); const wchar_t* ptr = s.data(); std::wcout << ptr << L"\n"; }
-
@manni66 Das funktioniert so. Danke dir!
Mich wundert aber wieso es funktioniert. Ich meine der vorgegebene Datentyp der MessageBox ist ja:
MessageBox(HWND, LPCWSTR, LPCWSTR, UINT)
Und unser Pointer hat wchar_t
-
LPCWSTR steht für Long Pointer (to) Const Wide String. Das ist ein typedef für
wchar_t const *
.
-
@TKuehn sagte in L" string " -> Variable innerhalb angeben ?!:
LPCWSTR
ist ein typedef für
const wchar_t*
.
-
Ok ich verstehe. Tut mir Leid für die vielleicht dummen Fragen.
-
swprintf()
-
Es gibt auch FAQs zu allen möglichen Themen hier, sie sind allerdings wirklich schwer zu finden und auch lange nicht mehr aktualisiert worden.
Korrekt sollten sie allerdings schon sein:
https://www.c-plusplus.net/forum/category/13/faqs-frequently-asked-questionsFür C++ (da dürfte allerdings einiges überholt sein)
https://www.c-plusplus.net/forum/category/38/faq-c-auch-c-0x-c-11?page=1
Oder WinAPI
https://www.c-plusplus.net/forum/category/22/faq-winapi?page=1Bei diesem Thema wäre es:
https://www.c-plusplus.net/forum/topic/39488/einmal-zahl-nach-string-und-zurückGanz nützlich sind sie eigentlich schon noch, daher frag ich micht auch, warum sie nicht besser platziert sind.
-
@Wade1234 sagte in L" string " -> Variable innerhalb angeben ?!:
swprintf()
Nicht typsicher, Gefahr von Bufferoverruns, eigene Formate nicht standartkonform möglich, ...
einfach nein.
-
tja bei c muss man eben ein wenig den kopf einschalten und wissen, was man da eigentlich übergibt, da gibt es keine templates und auto-datentypen.
das msdn rät übrigens dazu, vorher _scwprintf() aufzurufen, um zu überprüfen, ob der speicher überhaupt groß genug ist.
-
Der einzige garantiert mit der WinAPI kompatible compiler ist ein C++-Compiler der nur lausig C spricht. Ach, weißt was? Schreib's in Assembler.