2010-06-19 12 views

Antwort

15

Von MSDN:

#include <iostream> 
#include <stdlib.h> 
#include <string> 

using namespace std; 
using namespace System; 

int main() 
{ 
    char *orig = "Hello, World!"; 
    cout << orig << " (char *)" << endl; 

    // Convert to a wchar_t* 
    size_t origsize = strlen(orig) + 1; 
    const size_t newsize = 100; 
    size_t convertedChars = 0; 
    wchar_t wcstring[newsize]; 
    mbstowcs_s(&convertedChars, wcstring, origsize, orig, _TRUNCATE); 
    wcscat_s(wcstring, L" (wchar_t *)"); 
    wcout << wcstring << endl; 
} 
+2

Sie sollten mit Ihrer Quelle verweisen: http://msdn.microsoft.com/en-us/library/ms235631%28VS.80%29. aspx –

+6

Danke. Ich sollte eine Verknüpfung zu wahrscheinlich auch Google :) –

+0

Dies ist die perfekte Antwort – pradeep

0

This link hat Beispiele für viele Arten von String-Konvertierungen, einschließlich die, die Sie interessiert sind (suchen Sie nach mbstowcs_s)

0

Von Ihrem Beispiel swprintf_s mit funktionieren würde

wchar_t wcmd[40]; 
driver = FuncGetDrive(driver); 
swprintf_s(wcmd, "%C:\\test.exe", driver); 

Beachten Sie, dass das C in %C mit Großbuchstaben geschrieben werden muss, da der Treiber ist ein normales Zeichen und kein wchar_t.
Passing Ihre Zeichenfolge swprintf_s (WCMD, "% S", cmd) sollte auch

+0

Treiber vom Typ char – pradeep

+0

@rajivpradeep ist, das ist, was ich meinte, der Groß C anstelle von c für char ist – josefx

20

Verwenden Sie einfach diese Arbeit:

static wchar_t* charToWChar(const char* text) 
{ 
    const size_t size = strlen(text) + 1; 
    wchar_t* wText = new wchar_t[size]; 
    mbstowcs(wText, text, size); 
    return wText; 
} 

nicht delete [] wCharPtr auf dem Rückergebnis rufen Sie vergessen, wenn du bist fertig, sonst ist dies ein Speicherleck, das darauf wartet, dass es passiert, wenn du es ohne Aufräumen anrufst. Oder verwenden Sie einen intelligenten Zeiger wie der folgende Kommentar empfiehlt.

oder Standard-Strings verwenden, wie wie folgt:

#include <cstdlib> 
#include <cstring> 
#include <string> 

static std::wstring charToWString(const char* text) 
{ 
    const size_t size = std::strlen(text); 
    std::wstring wstr; 
    if (size > 0) { 
     wstr.resize(size); 
     std::mbstowcs(&wstr[0], text, size); 
    } 
    return wstr; 
} 
+1

Wenn Sie 'std :: unique_ptr wa (new wchar_t [size]) 'Sie müssen es später nicht manuell löschen. –

+1

Da wchar_t bereits einen Standardressourcenmanager mit std :: wstring besitzt, kann er auch anstelle eines intelligenten Zeigers verwendet werden. – Robert

Verwandte Themen