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