1

現在、C++でWindows7のクレデンシャルプロバイダーを変更しています。Windows SDKでは、PWSTRを使用する必要があります。

ユーザー名がDOMAIN\usernameとして、場合によってはdomain.tld \ usernameとして、場合によっては単にusernameとして渡されるという問題が発生しました。私がやりたいのは、これからユーザー名を抽出し、スラッシュの後の部分文字列のみを取得することです。

私はC++を初めて使用しますが、どの文字列関数もPWSTRで機能しないようです。wchar_t *への変換をいくつか試しましたが、それでもどこにも到達しません。

これはどのように達成できますか?

TIA

4

2 に答える 2

4

あなたは次のようなことをすることができます:

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

これは個別のメモリ割り当てを行わないことに注意してください。返されるのは、最後のスラッシュの後に始まる文字列の部分へのポインタです。高レベルのオブジェクトで見られるような適切な「サブストリング」操作を実行する場合(len - iオフセットから開始するのではなくi)、コピーを実行する必要があります(または、より短い長さのみを考慮していることを追跡する必要があります)。 )。

于 2012-07-20T22:15:16.273 に答える
1

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'
于 2012-07-20T22:08:17.057 に答える