how to convert char array to wchar_t array?

后端 未结 3 2018
情书的邮戳
情书的邮戳 2020-12-10 14:27
char cmd[40];
driver = FuncGetDrive(driver);
sprintf_s(cmd, \"%c:\\\\test.exe\", driver);

I cannot use cmd in

sei.lpF         


        
相关标签:
3条回答
  • 2020-12-10 15:00

    From 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 讨论(0)
  • 2020-12-10 15:04

    From your example using swprintf_s would work

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

    Note the C in %C has to be written with uppercase since driver is a normal char and not a wchar_t.
    Passing your string to swprintf_s(wcmd,"%S",cmd) should also work

    0 讨论(0)
  • 2020-12-10 15:11

    Just use this:

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

    Don't forget to call delete [] wCharPtr on the return result when you're done, otherwise this is a memory leak waiting to happen if you keep calling this without clean-up. Or use a smart pointer like the below commenter suggests.

    Or use standard strings, like as follows:

    #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;
    }
    
    0 讨论(0)
提交回复
热议问题