char を wchar_t に変換する際のメモリの保持
文字配列を ASCII から Unicode に変換すると、割り当てられたメモリを保持するという課題が発生しますメモリ。試みられた解決策は次のようになります。
<code class="cpp">const wchar_t *GetWC(const char *c) { const size_t cSize = strlen(c)+1; wchar_t wc[cSize]; mbstowcs(wc, c, cSize); return wc; }</code>
ただし、このアプローチは、wc のローカル定義のため不十分であり、関数呼び出しの最後に割り当てが解除され、未定義の動作が発生します。
この落とし穴を回避するには、簡単な変更が必要です。
<code class="cpp">const wchar_t *GetWC(const char *c) { const size_t cSize = strlen(c)+1; wchar_t* wc = new wchar_t[cSize]; mbstowcs(wc, c, cSize); return wc; }</code>
この調整されたコードでは、wc は new を使用して動的に割り当てられ、関数呼び出しを超えた永続性が保証されます。したがって、メモリ リークを防ぐために、割り当てられたメモリの割り当てを解除するのは呼び出しコードの責任になります。
以上が割り当てられたメモリを保持しながら char を wchar_t に安全に変換するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。