Einen String mit swprintf ausgeben
-
Hallo,
ich habe Schwierigkeiten einen String mit swprintf auszugeben. Ich habe folgendes probiert:string name = "aeg"; wstring wname(name.begin(), name.end()); TCHAR sizeStr[300]; swprintf_s(sizeStr, TEXT("Name: %s"), wname); TextOut(hdc, 10, 410, sizeStr, _tcsclen(sizeStr));
Nur leider kommt bei der Ausgabe immer nur Kauderwelsch raus. Irgendwas mache ich falsch….
-
wname ist kein %s.
-
@iova sagte in Einen String mit swprintf ausgeben:
Irgendwas mache ich falsch….
Du hast einfach die _s Funktion genommen, ohne dir die Referenz dazu durchzulesen.
Das ist kein 1:1 Ersatz.
-
Hmm, aber wenn ich einen normalen string nehme funktioniert es auch nicht. Was ist denn die Referenz zu %s in swprintf ?
-
@iova sagte in Einen String mit swprintf ausgeben:
Hmm, aber wenn ich einen normalen string nehme funktioniert es auch nicht. Was ist denn die Referenz zu %s in swprintf ?
Immer noch %s. Aber: Du hast immer noch nicht die Referenz zu
swprintf_s
durchgelesen! Die Funktion hat einfach ganz andere Argumente alsswprintf
.
-
string name = ""; name = dirSystem[(i + j * horizontal)]->getSubDirs(); //generiert Namensstring wstring wname(name.begin(), name.end()); const wchar_t* wchar = wname.c_str(); TCHAR sizeStr[300]; swprintf_s(sizeStr, TEXT("Name: %s"), wchar); TextOut(hdc, 10, 410, sizeStr, _tcsclen(sizeStr));
Ah, jetzt hab ich's verstanden. Jetzt ist nur noch das Problem, dass der String zu kurz ist und nur die letzen 4 Zeichen anzeigt.
-
@iova sagte in Einen String mit swprintf ausgeben:
Jetzt ist nur noch das Problem, dass der String zu kurz ist und nur die letzen 4 Zeichen anzeigt.
@seppj sagte in Einen String mit swprintf ausgeben:
Aber: Du hast immer noch nicht die Referenz zu swprintf_s durchgelesen! Die Funktion hat einfach ganz andere Argumente als swprintf.
Microsoft hat die Doku im MSDN abgelegt.
Suche nach "MSDN swprintf_s" oder auch printf_s und schau nach was da für den Formatspecifier %s steht. Nur den Zeiger auf den String reicht da nicht aus.
-
Du vermischst da aber auch alles, char, wchar, TCHAR...
Warum nicht einfach:string name = "aeg"; string txt = "Name: "+name; TextOutA(hdc, 10, 410, txt.c_str(), txt.length());
Wenn du TCHARs (also für beide Konfigurationen) verwenden möchtest, definiere einen string<TCHAR>:
typedef std::basic_string<TCHAR> tstring;
tstring name = TEXT("aeg"); tstring txt = TEXT("Name: ")+name; TextOut(hdc, 10, 410, txt.c_str(), txt.length());