如何将 PCWSTR 转换为字符 [] 或 wchar_t[]
How can I convert PCWSTR to a char[] or wchar_t[]
>我正在尝试创建一个文件,其中一个参数已传入该方法,并且类型为 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;
相关文章:
- C++字符*缓冲区的大小
- HEX值到wchar_t字符(UTF-8)的转换
- 为什么 Serial.println(<char[]>);返回随机字符?
- 我的字符计数代码计算错误.为什么
- 字符串-C++后显示的随机字符
- 将Integer转换为4字节的unsined字符矢量(按大端字节顺序)
- 如何在C++中从字符串中分割字符
- 为什么msgrcv()将垃圾字符馈送到缓冲区
- 指向指向字符数组的指针数组的指针
- 如何用转义符替换字符串中的所有特殊字符
- 为什么 sscanf 无法从一个字符串中读取uint64_t和字符?
- 比较字符数组
- 将字符指针十六进制转换为字符串并保存在文本文件C++中
- 从矢量<无符号字符>转换为字符* 包括垃圾数据
- 无法将参数 1 从 WCHAR 转换为常量字符 *
- 无法使用 swprintf 在 WCHAR* 中打印字符*
- 将字符从 fget 转换为 Wchar*
- 如何获取特定 WCHAR 字符的代码点
- "strcpy":无法将参数 2 从"WCHAR *"转换为"常量字符 *
- wchar /字符变量