widestrings in einfache strings konvertieren
-
Wenn das S im Formatstring groß ist, funktioniert bei mir alles (Compiler BCB5). Ich teste das gleich mal mit einen anderen Compiler.
-
Funktioniert so auch mit DevCpp.
-
au schei... das große S hab ich gar nicht gesehen. ja funktioniert

und wenn ich aus dem string einen widestring wieder machen will (also wieder in die andere richtung), dann benutz ich einfach L" ", richtig?was bedeutet das große S im gegensatz zum kleinen s?
-
%S ist aber kein Standard. Man sollte lieber %ls verwenden. (sagt zumindest die Manpage bei mir)
-
Folgendes habe ich in der Hilfe zu meinem Compiler gefunden
The following table shows the formatted output specifiers for the Unicode family of functions. The table shows how the format specifier is used by printf and the Unicode family of output functions to output strings and characters.
Format specifier printf function Unicode function
%c narrow wide
%C wide narrow
%hc narrow narrow
%hC narrow narrow
%lc wide wide
%lC wide wide
%s narrow wide
%S wide narrow
%hs narrow narrow
%hS narrow narrow
%ls wide wide
%lS wide wide
-
Verwirrendes Zeug
Die Manpage (unter Suse 9.3) behauptet, %ls sei das selbe wie %S, nur dass man %S nicht benutzen soll, weil es kein Standard ist.wcsrtombs (aus wchar.h / cwchar) soll wohl aber definitiv ANSI C sein und das gewünschte tun.
-
in der msdn find ich ja nix zu diesen einzelheiten...oder bin ich blind
-
Mit %ls funktioniert das auch.
-
Rio1 schrieb:
ehrlich wo denn genau. für mich sieht das alles wie konvertierung string in widestring aus. wie müsste dann danach mein Code aussehen?:
use_facet<ctype<wchar_t> > (cout.getloc()).widen(sbuffer,sbuffer*2,buffer)
eigentlich sieht der code fast genauso aus:
wchar_t wstring[6] = L"Hallo"; char string[6]; use_facet<ctype<wchar_t> > (cout.getloc()).narrow(wstring, wstring+6,'?', string);
-
danke, aber geht das auch mit embedded VC++? Welche header müssen dazu eingebunden werden (das use_facet, ctype ... werden als compilererror angezeigt)
-
müsste <locale> sein
-
#include <locale.h> konnte ich zwar einbinden aber folgende Compiliermeldung:
errorC2065: 'use_facet' : undeclared identifier errorC2065: 'ctype' : undeclared identifier errorC2275: 'wchar_t' : illegal use of this type as an expression errorC2059: syntax error : '>'klappt irgendwie nicht damit.
-
Die Sachen sind bei mir (gcc 3.4.2 mit CodeBlocks) in iostream. Wobei der beim Ausführen von Otzes Code mit "abnormal program termination" rausgeht.
-
Ich habs gerade nochmal mit dem BCB6 probiert und da geht es.
-
Aber embedded VC++ scheint das nicht zu wollen. Komisch, die locale lässt sich ja einbinden. Kann auch sein, dass die bei embedded nur in abgespeckter Form vorhanden ist.
-
...muss eigentlich nach solchen aktionen:
char* test = new char[20]; wchar_t* wtest = L"Hallo"; sprintf(test,"%s",wtest);nicht unbedingt ein free(test) folgen ?
-
nein. delete[]