Frage

Ich versuche, einen char-String in einem wchar Zeichenfolge zu konvertieren.

Im Detail: Ich versuche, ein Zeichen zu konvertieren [] zu einem wchar [] und dann append „1“ zu dieser Zeichenfolge und der Druck es

.
char src[256] = "c:\\user";

wchar_t temp_src[256];
mbtowc(temp_src, src, 256);

wchar_t path[256];

StringCbPrintf(path, 256, _T("%s 1"), temp_src);
wcout << path;

Aber es druckt nur c

Ist dies der richtige Weg von char wchar zu konvertieren? Ich bin gekommen, da eine andere Art und Weise kennen zu lernen. Aber ich würde gerne wissen, warum der obige Code so funktioniert, es funktioniert?

War es hilfreich?

Lösung

mbtowc wandelt nur ein einzelnes Zeichen. Meinen Sie verwenden mbstowcs ?

Normalerweise rufen Sie diese Funktion zweimal; die erste, die erforderliche Puffergröße, und die zweite, um tatsächlich wandelt es zu erhalten:

#include <cstdlib> // for mbstowcs

const char* mbs = "c:\\user";
size_t requiredSize = ::mbstowcs(NULL, mbs, 0);
wchar_t* wcs = new wchar_t[requiredSize + 1];
if(::mbstowcs(wcs, mbs, requiredSize + 1) != (size_t)(-1))
{
    // Do what's needed with the wcs string
}
delete[] wcs;

Wenn Sie lieber verwenden mbstowcs_s (wegen deprecation Warnungen), dann dies zu tun:

#include <cstdlib> // also for mbstowcs_s

const char* mbs = "c:\\user";
size_t requiredSize = 0;
::mbstowcs_s(&requiredSize, NULL, 0, mbs, 0);
wchar_t* wcs = new wchar_t[requiredSize + 1];
::mbstowcs_s(&requiredSize, wcs, requiredSize + 1, mbs, requiredSize);
if(requiredSize != 0)
{
    // Do what's needed with the wcs string
}
delete[] wcs;

Stellen Sie sicher, dass kümmern locale Fragen über setlocale () oder mit den Versionen von mbstowcs() (wie mbstowcs_l() oder mbstowcs_s_l()), das ein locale Argumente.

Andere Tipps

Warum verwenden Sie C-Code, und warum es nicht in einer tragbaren Weise schreiben, zum Beispiel, was ich hier zu tun ist, um die STL verwenden!

std::string  src = std::string("C:\\user") +
                   std::string(" 1");
std::wstring dne = std::wstring(src.begin(), src.end());

wcout << dne;

Es ist so einfach, es ist einfach: D

L "Hallo Welt"

das Präfix L vor dem String macht es einen breiter char-String.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top