【问题标题】:How to concat LPCWSTR and char[]?如何连接 LPCWSTR 和 char[]?
【发布时间】:2011-08-29 15:39:18
【问题描述】:

我正在尝试连接 LPCWSTR 和 char[](并将 LPCWSTR 作为输出)。

我该怎么做?

【问题讨论】:

    标签: c++ string char concat


    【解决方案1】:

    您正在尝试将 UNICODE 字符串与 ANSI 字符串连接。除非您将 ANSI 字符串转换为 UNICODE,否则这将不起作用。您可以为此使用MultiByteToWideChar,如果您使用的是ATL 或MFC,则可以使用ATL and MFC String Conversion Macros

    【讨论】:

    • 如何将 char[] 转换为 LPCWSTR?那不是更容易吗? MultiByteToWideChar 有太多 arg 我不知道它们是什么意思:P
    • @riviraz:您可以接受的最大参数数量是多少?如果您不需要MultiByteToWideChar() 提供的选项,请尝试mbstowcs()
    • 我已经尝试过 mbstowcs 但我得到“无法将参数 1 从 'LPCWSTR' 转换为 'wchar_t *'”
    • @riviraz:使用 mbstowcs() 表示多字节 -> 宽字符。您可能正在以相反的方式使用它。你也可以试试wcstombs()
    【解决方案2】:

    您可以使用以下代码(来自MSDN)将char[] 数组转换为宽字符数组

    wchar_t * wcstring = new wchar_t[strlen(array) + 1];
    
    // Convert char* string to a wchar_t* string.
    size_t convertedChars = 0;
    mbstowcs_s(&convertedChars, wcstring, strlen(array) + 1, array, _TRUNCATE);
    

    之后,您可以使用wcscat_s 将转换后的字符数组连接到您原来的LPCWSTR

    【讨论】:

    • 我试过了,但我得到:“错误 C2664: 'errno_t wcscat_s(wchar_t *,rsize_t,const wchar_t *)' : 无法将参数 1 从 'LPCWSTR' 转换为 'wchar_t *'”跨度>
    • 您必须使用原始 LPCWSTR 作为第三个参数。所以调用看起来像 wcscat_s(wcstring, strlen(array) + 1, /* LPCWSTR */)。如果你想要像 LPCWSTR+char[] 这样的连接,你必须先将 LPCWSTR 复制到宽字符数组中。
    • 使用 LPWSTR ,它是 wchar_t*。 LPCWSTR 是 const wchar_t*。所以你可以将 LPWSTR 作为 LPCWSTR 返回,它会被自动转换
    • 它有效,但不是最有效的方法:为结果创建一个足够大的缓冲区,首先复制宽输入字符串,然后让mbstowcs 直接写入该缓冲区。这节省了wcscat 的不必要副本
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-05
    • 1970-01-01
    • 1970-01-01
    • 2017-09-13
    • 2017-02-05
    • 1970-01-01
    相关资源
    最近更新 更多