Unicode 統合のために char を wchar_t に変換する方法
問題:
開発者は、Unicode アプリケーションで char を wchar_t に変換する際に問題が発生する可能性があります。次のコード例は、一般的なエラーを示しています。
<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 が関数から返されるときに割り当てが解除されるローカル変数であるために発生します。その結果、未定義の動作が発生します。正しいアプローチは、new を使用して動的に 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>
注: 回避するために、呼び出しコードは割り当てられたメモリの割り当てを解除する必要があります。メモリリーク。
以上がUnicode アプリケーションで char を wchar_t に変換すると、未定義の動作が発生するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。