C++ 如何将PCWSTR转换为char[]或wchar\u t[]
我正在尝试创建一个文件,其中一个参数已传递给该方法,并且类型为PCWSTR。我的代码创建了一个.url文件,并将该url保存到该文件中:C++ 如何将PCWSTR转换为char[]或wchar\u t[],c++,windows,string,unicode,C++,Windows,String,Unicode,我正在尝试创建一个文件,其中一个参数已传递给该方法,并且类型为PCWSTR。我的代码创建了一个.url文件,并将该url保存到该文件中: wchar_t array1[] = "[InternetShortcut]\nURL="; wchar_t array2[] = pdwFavoriteUrl; wchar_t * DataBuffer = new wchar_t[wcslen(array1) + std::strlen(array2) + 1
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];
这可能只会给您带来不愉快的问题和内存泄漏。删除
wchar_t array2[] = pdwFavoriteUrl;
并将对strcat的调用更改为
std::strcat(DataBuffer, pwdFavoriteUrl);
(同样,在调用strlen
时,将array2
替换为pwdFavoriteUrl
)
请注意,PCWSTR
只是
typedef const wchar_t * PCWSTR;
我只需要从中创建一个
std::wstring
,并使用缓冲区(C++11)。数组不能用指针初始化。您似乎根本不需要array2
。