如何在C++中从PWSTR中提取子字符串

How to extract a substring from a PWSTR in C++

本文关键字:提取 字符串 PWSTR 中从 C++      更新时间:2023-10-16

我目前正在用C++修改Windows 7的凭据提供程序。Windows SDK需要使用PWSTR。

我遇到了一个问题,用户名有时被传递为DOMAIN\username,有时传递为DOMAIN.tld\username。有时只是username。我想做的是从中提取用户名,只取斜杠后面的子字符串。

我是C++的新手,似乎没有一个字符串函数可以使用PWSTR。我已经尝试了一些到wchar_t*的转换,但仍然没有取得任何进展。

如何做到这一点?

TIA

您可以执行以下操作:

PWSTR GetUserName(PWSTR pszUser)
{
   PWSTR pszLastSlash = wcsrchr(pszUser, L'');
   return pszLastSlash ? pszLastSlash + 1 : pszUser;
}

请注意,这不会进行单独的内存分配——返回的是指向最后一个斜杠之后开始的字符串部分的指针。如果你要做一个正确的"子字符串"操作,就像你在更高级别的对象中看到的那样(而不是只从偏移量i开始取len - i),你必须做一个复制(或者以某种方式跟踪你只考虑更小的长度)。

不要将std::string用于宽字符串。请改用std::wstringPWSTRwchar_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'