как преобразовать массив char в массив wchar t?
char cmd[40];
driver = FuncGetDrive(driver);
sprintf_s(cmd, "%c:test.exe", driver);
Я не могу использовать cmd
на
sei.lpFile = cmad;
так,
как конвертировать char
массива wchar_t
массив ?
4 ответов
С 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;
}
просто использовать это:
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;
}
этой ссылке имеет примеры для многих типов преобразования строк, включая тот, который вас интересует (ищите mbstowcs_s)
из вашего примера с помощью 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) также должна работать