LPWSTR の内容を既存の wstring にコピーする方法を探しています。逆を行う例をたくさん見つけましたが、まだそれを行う方法を探しています。
ありがとう
LPWSTR の内容を既存の wstring にコピーする方法を探しています。逆を行う例をたくさん見つけましたが、まだそれを行う方法を探しています。
ありがとう
文字列、ピリオドを変更した後に同じポインターをレンダリングすることを保証することはできません.c_str()
(それがあなたがしようとしている場合)。
オブジェクトに a を割り当てる正しい方法は、次のように を使用するLPWSTR
ことです。std::wstring
operator=()
std::wstring existingString = L"text";
LPCWSTR c_str = L"more text";
existingString = c_str;
しかし、これは非常に単純です。これでカバーできない場合は、何をしようとしているのかを詳しく説明する必要があります。
なぜだめですか
LPWSTR k = L"my string";
std::wstring ws(k);
または、本当に既存の wstring に割り当てる必要がある場合
std::wstring existing;
....
existing.assign(k);
これが割り当て時間を節約するためである場合、 std::wstring は通常正しいことを行うのに適していますが、本当に絶対にこれを行う必要がある場合...
wcsncpy(&wstr[0], wsrc, wstr.size()-1);
wstr[wstr.size()-1] = 0;
私はそれを書いて本当に汚いと感じました。注: これは wstr オブジェクトにスペースを割り当てません。さらに、実際に wstr が現在空である場合は爆発することを保証するので、注意してください。ストレージにすでにあるものだけを使用します。より多くのスペースが必要な場合は、適切に .resize() を使用しますが、前に述べたように、 std::wstring の代入演算子は、そのままにしておけば、実際に必要なことを実行します。
それを行うことは、ハックと実装に依存します。正しい方法は、LPCWSTR を wstringに割り当てることです。コンパイラは、内容が存在する場合は既存の char バッファーに正しくコピーされるか、最初に割り当ててからコピーすることを確認します。