как преобразовать массив символов в массив wchar_t? - PullRequest
10 голосов
/ 19 июня 2010
char cmd[40];
driver = FuncGetDrive(driver);
sprintf_s(cmd, "%c:\\test.exe", driver);

Я не могу использовать cmd в

sei.lpFile = cmad;

так, как конвертировать char массив в wchar_t массив?

Ответы [ 4 ]

20 голосов
/ 31 марта 2011

Просто используйте это:

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

Не забудьте вызвать delete [] wCharPtr для результата возврата, когда закончите, иначе это утечка памяти, ожидающая, если вы продолжите вызывать это без очистки. Или используйте умный указатель, как показано ниже.

Или используйте стандартные строки, например:

#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;
}
16 голосов
/ 19 июня 2010

С 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;
}
0 голосов
/ 19 июня 2010

В вашем примере использование swprintf_s будет работать

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

Обратите внимание, что C в % C должен быть написан заглавными буквами, так как драйвер - это обычный символ ине wchar_t.
Передача вашей строки в swprintf_s (wcmd, "% S", cmd) также должна работать

0 голосов
/ 19 июня 2010

Эта ссылка содержит примеры для многих типов преобразования строк, включая интересующий вас (ищите mbstowcs_s)

...