c++ 窗口对话框:如何将PWSTR类型转换为char*?

46scxncf  于 2023-08-09  发布在  其他
关注(0)|答案(1)|浏览(198)

我正在使用Windows对话框选择文件。我收到的输出类型是PWSTR。每当我试图将其转换为char*时,我得到的都是字符串的第一个字符(即'C')。
对于某些上下文,我的变量名是pszFilePath。我使用了多种类型的转换,比如使用reinterpret_caststatic_cast(char*)pszFilePath。所有这些都不起作用,或者导致错误。

soat7uwm

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

字符串

相关问题