如何从C ++中的PWSTR中提取一个子string

我目前正在使用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::wstringPWSTR是一个wchar_t * ,其中std::stringstd::basic_string<char>std::wstringstd::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'