C++ 在C+中使用带正则表达式匹配的PUNICODE_字符串+;

C++ 在C+中使用带正则表达式匹配的PUNICODE_字符串+;,c++,winapi,C++,Winapi,我正在尝试使用PasswordFilter函数,需要获取密码变量值,这是一个PUNICODE_字符串,然后使用regex_匹配来匹配密码策略 问题是regex_match无法识别PUNICODE_字符串 我能做什么?存储为LSA\u UNICODE\u字符串(或其typedefs)的字符串可能不是以null结尾的,因此将缓冲区指针传递到预期以null结尾的字符串(或std::wstring)的函数不能保证安全 相反,使用Length字段指定字符串的长度,将其转换为std::wstring: PU

我正在尝试使用PasswordFilter函数,需要获取密码变量值,这是一个PUNICODE_字符串,然后使用regex_匹配来匹配密码策略

问题是regex_match无法识别PUNICODE_字符串


我能做什么?

存储为
LSA\u UNICODE\u字符串(或其typedefs)的字符串可能不是以null结尾的,因此将
缓冲区
指针传递到预期以null结尾的字符串(或
std::wstring
)的函数不能保证安全

相反,使用
Length
字段指定字符串的长度,将其转换为
std::wstring

PUNICODE_STRING pStringIn; // this comes from somewhere
std::wstring strOut(pStringIn->Buffer, pStringIn->Length / sizeof(wchar_t));

然后,您可以使用
strOut.c_str()
或直接将其传递给接受
std::wstring

的函数。您是否查看了文档?如果不清楚
PUNICODE\u字符串
是否与
UNICODE\u字符串*
相同,我可以用wstring进行正则表达式匹配,但不能用UNICODE\u字符串。您知道是否有差异吗?您必须传递一个指向缓冲区的指针,即
UNICODE\u STRING::buffer
。由于您使用的是指针,
p->Buffer
返回一个指向存储序列的指针。不知怎的,在我的迷雾中,我错过了关于缺少空终止符的警告。谢谢你抓住我的错误。