我目前正在用 C++ 修改 Windows 7 的凭据提供程序。Windows SDK 需要使用 PWSTR。
我遇到了一个问题,用户名有时作为 DOMAIN\username 传递,有时作为 domain.tld\username 传递,有时只是用户名。我想做的是从中提取用户名,并且只在斜杠后面取子字符串。
我是 C++ 新手,似乎没有一个字符串函数可以与 PWSTR 一起使用。我已经尝试了几次到 wchar_t* 的转换,但它仍然没有让我到任何地方。
如何做到这一点?
TIA
我目前正在用 C++ 修改 Windows 7 的凭据提供程序。Windows SDK 需要使用 PWSTR。
我遇到了一个问题,用户名有时作为 DOMAIN\username 传递,有时作为 domain.tld\username 传递,有时只是用户名。我想做的是从中提取用户名,并且只在斜杠后面取子字符串。
我是 C++ 新手,似乎没有一个字符串函数可以与 PWSTR 一起使用。我已经尝试了几次到 wchar_t* 的转换,但它仍然没有让我到任何地方。
如何做到这一点?
TIA
您可以执行以下操作:
PWSTR GetUserName(PWSTR pszUser)
{
PWSTR pszLastSlash = wcsrchr(pszUser, L'\\');
return pszLastSlash ? pszLastSlash + 1 : pszUser;
}
请注意,这不会进行单独的内存分配 - 您返回的是指向最后一个斜杠之后开始的字符串部分的指针。如果您要执行正确的“子字符串”操作,就像您在更高级别的对象中看到的那样(而不是仅仅len - i
从 offset 开始i
),您必须进行复制(或者以某种方式跟踪您只考虑较小的长度)。
不要std::string
用于宽字符串。改为使用std::wstring
。PWSTR
是wchar_t *
, 哪里std::string
是std::basic_string<char>
,std::wstring
是std::basic_string<wchar_t>
. 使用它,您应该能够完成可以将 a 转换char *
为std::string
和操作它的操作。您可以在此页面上看到两者相似并且具有相同的功能等。
从那里,所有需要做的事情如下:
wchar_t chars[] = L"abc";
std::wstring ws = chars;
std::wstring sub = ws.substr (0, 2);
std::wcout << sub.c_str(); //should print 'ab'