Wie benutzt man wsprintf?
-
Wenn ich das schreibe:
const int buffersize=100; //Global //... TCHAR [buffersize] szBuffer; int i=12345 wsprintf(szBuffer,"%d", i); //...
bekomme ich folgenden error:
error C2664: 'wsprintfW': Konvertierung des Parameters 2 von 'const char [11]' in 'LPCWSTR' nicht möglich Die Typen, auf die verwiesen wird, sind nicht verknüpft; die Konvertierung erfordert einen reinterpret_cast-Operator oder eine Typumwandlung im C- oder Funktionsformat.
Warum?
-
wsprintf ist die 'wide version' (UNICODE) von sprintf (ANSI). Du versuchst der Funktion einen ANSI-String zu übergeben, wobei er aber einen Unicode-String erwartet. Einfach ein 'L' vor das erste Anführungszeichen voranstellen und das Problem sollte gelöst sein.
Also:
wsprintf(szBuffer, L"%d", i);
-
ja, das klappt! Aber: sinnd der sache ist doch, das ganze generisch ist, oder? Also was muss ich schreiben, wenn ich will das mein Text je nach dem, ob UNICODE und _UNICODE definiert sind, als ascii oder als wide interpretiert wird?
Ich sehe gerade, könnte es _T(...) sein?
-
Wenn du das ganze generisch haben willst dann musst du für Strings das _T() Makro verwenden. Die generischen Makros für Funktionen sind in den jeweiligen Funktionsbeschreibungen in der MSDN zu finden.
-
wsprintf ist keine reine Unicode-Version, wenn kein Unicode definiert ist arbeitet sie auch mit "char"...
-
Genau! Die reine UNICODE version heißt wsprintfW und wird mittels Makro immer aufgerufen, wenn UNICODE definiert ist und man wsprintf benutzt!
-
Muss den Topic nochmal aufrollen...
TCHAR szBuffer[100]; int i=4; wsprintf(szBuffer, _T("%d"), i); basic_string<TCHAR> a; for (int j=0;szBuffer[j];++j) a[j]=szBuffer[j]; MessageBox(hwnd,a.c_str(),_T("Testbox"),0);
Beim kompilieren kommt in der message Box 4 und dann unverständliche (Chinesische?) Zeichen! Aber es geht noch weiter:
basic_string<TCHAR> b; b+=a; TextOut(hdc, 0, 0, b.c_str(), b.size());
Keine Ausgabe! WIESO DAS!
-
TCHAR szBuffer[100]; int i=4; wsprintf(szBuffer, TEXT("%d"), i); basic_string<TCHAR> a(szBuffer); MessageBox(hwnd,a.c_str(),TEXT("Testbox"),0);
-
@DUMM: es klappt! Aber wiso
Müssten da net noch en haufen "nixzeichen" sein?
-
Warum? wsprintf 0 terminiert den buffer doch.
-
OK, beantworte mir nch eine Frage:
TCHAR szBuffer[100]; double d=4.15; wsprintf(szBuffer, TEXT("%f"), d); basic_string<TCHAR> a(szBuffer); MessageBox(hwnd,a.c_str(),TEXT("Testbox"),0); //Ausgabe:f??
-
wsprintf unterstützt keine Fließkommazahlen.
-
Nimm dazu _stprintf aus tchar.h oder benutze C++ Stringstreams.