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

Posted

技术标签:

【中文标题】如何将 char 数组转换为 wchar_t 数组?【英文标题】:how to convert char array to wchar_t array? 【发布时间】:2011-03-05 17:22:45 【问题描述】:
char cmd[40];
driver = FuncGetDrive(driver);
sprintf_s(cmd, "%c:\\test.exe", driver);

我不能在

中使用cmd
sei.lpFile = cmad;

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

【问题讨论】:

【参考方案1】:

就用这个吧:

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;

【讨论】:

如果您使用std::unique_ptr&lt;wchar_t[]&gt; wa(new wchar_t[size]),您以后不必手动删除它。 由于 wchar_t 已经有一个标准的资源管理器和 std::wstring,它也可以用来代替智能指针。【参考方案2】:

来自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;

【讨论】:

你应该链接到你的来源:msdn.microsoft.com/en-us/library/ms235631%28VS.80%29.aspx【参考方案3】:

从您的示例中使用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) 也应该可以工作

【讨论】:

@rajivpradeep 这就是我的意思,大写的 C 而不是 c 是 char

以上是关于如何将 char 数组转换为 wchar_t 数组?的主要内容,如果未能解决你的问题,请参考以下文章

如何将char*转换为wchar

怎么把char型数组转换为lpwstr

win32控制台里 wchar_t字符串转成char数组!

CString 如何转为wchar_t

char* 和 wchar_t* 如何互相转换

如何定义宏以将连接的char字符串转换为C中的wchar_t字符串