如何将 PCWSTR 转换为字符 [] 或 wchar_t[]

How can I convert PCWSTR to a char[] or wchar_t[]

本文关键字:wchar 字符 PCWSTR 转换      更新时间:2023-10-16

>我正在尝试创建一个文件,其中一个参数已传入该方法,并且类型为 PCWSTR。我的代码创建一个 .url 文件并将 URL 保存到文件中:

        wchar_t array1[] = "[InternetShortcut]nURL=";
        wchar_t array2[] = pdwFavoriteUrl;
        wchar_t * DataBuffer = new wchar_t[wcslen(array1) + std::strlen(array2) + 1];
        std::strcpy(DataBuffer,array1);
        std::strcat(DataBuffer,array2);
        // Write data to file
        DWORD dwBytesToWrite = (DWORD)strlen(DataBuffer);
        DWORD dwBytesWritten = 0;
        BOOL bErrorFlag = FALSE;
        bErrorFlag = WriteFile(hFile, DataBuffer, dwBytesToWrite, &dwBytesWritten, NULL);
        if (FALSE == bErrorFlag)
        {
            // Log error
            hr = E_FAIL;
        }
        else
        {
            if (dwBytesWritten != dwBytesToWrite)
            {
                // Log error
                hr = E_FAIL;
            }
            else
            {
                // Log success
                hr = S_OK;
                //_tprintf(TEXT("Wrote %d bytes to %s successfully.n"), dwBytesWritten, argv[1]);
            }
        }
        CloseHandle(hFile);

我知道代码不会按原样编译,因为 unicode 和非 unicode 字符串方法的版本存在冲突。感兴趣的是这样的:

wchar_t array2[] = pdwFavoriteUrl;

pdwFavoriteUrl 的类型为 PCWSTR,没有办法绕过它。请帮助将其转换为 wchar_t[](首选)或字符 []。

AFAIK PCWSTR 只是 wchar_t* 的别名,如果它是以 null 结尾的,最简单的方法是使用它来构造类型 std::wstring 的对象。只需将其传递给构造函数:

PCWSTR wcstr = L"My String";
std::wstring wstr(wcstr);

并使用std::wstring对象,而不是做邪恶的事情,例如:

wchar_t * DataBuffer = new wchar_t[wcslen(array1) + std::strlen(array2) + 1];

这可能只会给您带来不愉快的问题和内存泄漏。

删除

wchar_t array2[] = pdwFavoriteUrl;

并将呼叫更改为strcat

std::strcat(DataBuffer, pwdFavoriteUrl);

(同样,在调用strlen中将array2替换为pwdFavoriteUrl

请注意,PCWSTR只是

typedef const wchar_t * PCWSTR;