我目前正在使用C ++修改Windows 7的凭据提供程序。 Windows SDK需要使用PWSTR。
我遇到了一个问题,用户名有时被作为域名\用户名,有时作为域名.tld \用户名,有时只是用户名。 我想要做的是从这里提取用户名,只有斜杠后面的子string。
我是C ++的新手,没有一个string函数可以与PWSTR一起工作。 我已经尝试了一些转换为wchar_t *,但它仍然没有得到我的任何地方。
这怎么能实现?
TIA
你可以做这样的事情:
PWSTR GetUserName(PWSTR pszUser) { PWSTR pszLastSlash = wcsrchr(pszUser, L'\\'); return pszLastSlash ? pszLastSlash + 1 : pszUser; }
请注意,这不会执行单独的内存分配 – 您返回的是指向最后一个斜杠后面的字符串部分的指针。 如果你要做一个适当的“子字符串”操作,就像你可能在高级对象中看到的那样(而不是仅仅是从len - i
开始),你必须做一个副本(或者以某种方式跟踪你只是考虑更小的长度)。
对于宽字符字符串不要使用std::string
。 改用std::wstring
。 PWSTR
是一个wchar_t *
,其中std::string
是std::basic_string<char>
, std::wstring
是std::basic_string<wchar_t>
。 使用它,你应该能够完成你可以将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'