如何将char数组转换为wchar_t数组?

时间:2010-06-19 07:42:07

标签: c++ arrays char wchar-t

char cmd[40];
driver = FuncGetDrive(driver);
sprintf_s(cmd, "%c:\\test.exe", driver);

我无法在

中使用cmd
sei.lpFile = cmad;

所以, 如何将char数组转换为wchar_t数组?

4 个答案:

答案 0 :(得分:20)

请使用:

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

答案 1 :(得分:16)

来自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 :(得分:0)

This link包含许多类型的字符串转换的示例,包括您感兴趣的字符串转换(查找mbstowcs_s)

答案 3 :(得分:0)

使用swprintf_s的示例可以使用

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

注意%C中的C必须用大写写,因为驱动程序是普通的char而不是wchar_t。
将字符串传递给swprintf_s(wcmd,“%S”,cmd)也应该可以正常工作