如何在C++中从PWSTR中提取子字符串
How to extract a substring from a PWSTR in C++
我目前正在用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::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'
相关文章:
- 清除输入缓冲区后未提取字符串流
- 提取字符串中的随机单词
- 提取C++字符串
- 如何提取字符串中的特定值
- 如何提取字符串中的整数?
- 正则表达式:从模式字符串 1.string2'string3 中提取字符串,其中字符串 1 可以包含 '." 字符
- C - 从逗号分隔的浮点线提取字符串
- 如何使用正则表达式提取字符串的不匹配部分
- 处理从 std::istream 中提取字符串的空字符串大小写
- 可视化从文本C++中提取字符串数据
- 如何在C++中有效地提取字符串模式
- 分析文本文件以提取字符串
- C++:从两个符号之间提取字符串
- 提取字符串的一部分并将部分放入字符数组和另一个字符串变量C++
- 如何在c++中提取字符串的一部分
- 使用getline(),然后从用户输入中提取字符串(使用c++)
- 尝试从文本文件中读取列表,然后搜索文本文件,并在c++中提取字符串
- 试图从c++文本文件的单行中提取字符串的一部分
- 从字符数组中提取字符串
- 从JavaScript代码中提取字符串