繁体   English   中英

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

[英]How to extract a substring from a PWSTR in C++

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

我遇到了一个问题,即用户名有时会以DOMAIN \\用户名的形式传递,有时也会传递给domain.tld \\ username,有时只是用户名。 我想要做的是从中提取用户名,并且只在斜杠后面获取子字符串。

我是C ++的新手,没有任何字符串函数可以与PWSTR一起使用。 我已经尝试了几次wchar_t *的转换,但它仍然没有让我到任何地方。

怎么能实现这一目标?

TIA

你可以这样做:

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM