2010-06-19 7 views

Répondre

15

De 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

Vous devriez créer un lien vers votre source: http://msdn.microsoft.com/en-us/library/ms235631%28VS.80%29. aspx –

+6

Merci. Je devrais probablement lier à google aussi bien :) –

+0

Ceci est la réponse parfaite – pradeep

0

This link a des exemples pour de nombreux types de conversions de chaînes, y compris celui qui vous intéresse (cherchez mbstowcs_s)

0

De votre exemple en utilisant swprintf_s fonctionnerait

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

Notez que le C en %C doit être écrit en majuscules car le pilote est un char normal et pas un wchar_t.
Passer votre chaîne à swprintf_s (WCMD, "% S", cmd) devrait également fonctionner

+0

pilote est de type char – pradeep

+0

@rajivpradeep qui est ce que je voulais dire, le majuscule C au lieu de c est pour char – josefx

20

utiliser juste ceci:

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; 
} 

Ne pas oublier d'appeler delete [] wCharPtr sur le résultat de retour lorsque vous êtes fait, sinon c'est une fuite de mémoire qui attend de se produire si vous continuez à l'appeler sans nettoyage. Ou utilisez un pointeur intelligent comme le suggère le commentateur ci-dessous.

Ou utiliser des chaînes standards, comme la façon suivante:

#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

Si vous utilisez 'std :: unique_ptr wa (new wchar_t [size]) 'vous ne devrez pas le supprimer manuellement plus tard. –

+1

Étant donné que wchar_t dispose déjà d'un gestionnaire de ressources standard avec std :: wstring, il peut également être utilisé à la place d'un pointeur intelligent. – Robert

Questions connexes