1

LPWSTR の内容を既存の wstring にコピーする方法を探しています。逆を行う例をたくさん見つけましたが、まだそれを行う方法を探しています。

ありがとう

4

4 に答える 4

2

文字列、ピリオドを変更した後に同じポインターをレンダリングすることを保証することはできません.c_str()(それがあなたがしようとしている場合)。

オブジェクトに a を割り当てる正しい方法は、次のように を使用するLPWSTRことです。std::wstringoperator=()

std::wstring existingString = L"text";
LPCWSTR c_str = L"more text";
existingString = c_str;

しかし、これは非常に単純です。これでカバーできない場合は、何をしようとしているのかを詳しく説明する必要があります。

于 2012-09-03T13:09:37.643 に答える
1

なぜだめですか

LPWSTR k = L"my string";
std::wstring ws(k);

または、本当に既存の wstring に割り当てる必要がある場合

 std::wstring existing;
 ....
 existing.assign(k);
于 2012-09-03T12:34:53.390 に答える
1

これが割り当て時間を節約するためである場合、 std::wstring は通常正しいことを行うのに適していますが、本当に絶対にこれを行う必要がある場合...

wcsncpy(&wstr[0], wsrc, wstr.size()-1);
wstr[wstr.size()-1] = 0;

私はそれを書いて本当に汚いと感じました。注: これは wstr オブジェクトにスペースを割り当てません。さらに、実際に wstr が現在空である場合は爆発することを保証するので、注意してください。ストレージにすでにあるものだけを使用します。より多くのスペースが必要な場合は、適切に .resize() を使用しますが、前に述べたように、 std::wstring の代入演算子は、そのままにしておけば、実際に必要なことを実行します。

于 2012-09-03T12:31:44.020 に答える
1

それを行うことは、ハックと実装に依存します。正しい方法は、LPCWSTR を wstringに割り当てることです。コンパイラは、内容が存在する場合は既存の char バッファーに正しくコピーされるか、最初に割り当ててからコピーすることを確認します。

于 2012-09-03T12:37:50.610 に答える