C++ 在C+中使用带正则表达式匹配的PUNICODE_字符串+;
我正在尝试使用PasswordFilter函数,需要获取密码变量值,这是一个PUNICODE_字符串,然后使用regex_匹配来匹配密码策略 问题是regex_match无法识别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
我能做什么?存储为
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
返回一个指向存储序列的指针。不知怎的,在我的迷雾中,我错过了关于缺少空终止符的警告。谢谢你抓住我的错误。