我正在使用Windows对话框选择文件。我收到的输出类型是PWSTR。每当我试图将其转换为char*时,我得到的都是字符串的第一个字符(即'C')。对于某些上下文,我的变量名是pszFilePath。我使用了多种类型的转换,比如使用reinterpret_cast、static_cast和(char*)pszFilePath。所有这些都不起作用,或者导致错误。
PWSTR
char*
'C'
pszFilePath
reinterpret_cast
static_cast
(char*)pszFilePath
soat7uwm1#
PWSTR是wchar_t* 字符串https://learn.microsoft.com/en-us/windows/win32/learnwin32/working-with-strings因此,您需要将wchar_t* 转换为char*。stdlib. h中的wcstombs(mbstring,wcstring,N)就是这样做的。关于只转换字符串的第一个字符,我猜你会使用sizeof(var)/ sizeof(PWSTR)来为char* 字符串分配内存,但它不是这样工作的。我真的不知道如何获得PWSTR的长度,因为strlen()不适用于wchar_t*,所以你需要一些结构来计算它或其他东西。范例
PWSTR pw = new wchar_t; PCWSTR pcw = L"qwe\n\0"; wcscpy(pw, pcw); char *c = (char*)malloc(sizeof(char) * 5); wcstombs(c, pw, 5); printf("%s", c);
字符串
1条答案
按热度按时间soat7uwm1#
PWSTR是wchar_t* 字符串
https://learn.microsoft.com/en-us/windows/win32/learnwin32/working-with-strings
因此,您需要将wchar_t* 转换为char*。stdlib. h中的wcstombs(mbstring,wcstring,N)就是这样做的。
关于只转换字符串的第一个字符,我猜你会使用sizeof(var)/ sizeof(PWSTR)来为char* 字符串分配内存,但它不是这样工作的。我真的不知道如何获得PWSTR的长度,因为strlen()不适用于wchar_t*,所以你需要一些结构来计算它或其他东西。
范例
字符串