gpt4 book ai didi

c++ - 如何将 PCWSTR 转换为 char[] 或 wchar_t[]

转载 作者:行者123 更新时间:2023-11-28 07:21:23 26 4
gpt4 key购买 nike

我正在尝试创建一个文件,其中一个参数已传递给该方法并且属于 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[](首选)或 char[]。

最佳答案

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

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

关于c++ - 如何将 PCWSTR 转换为 char[] 或 wchar_t[],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19416344/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com