std::string からの定数 Char ポインターの適切な戻りメソッド
プログラミングでは、Coverity などのエラー検出ツールが潜在的な問題にフラグを立てます。そのような問題の 1 つは、std::string から問題のある定数 char ポインタが返されることで、未定義の動作を引き起こす可能性があります。
次のコードを考えてみましょう。
const char * returnCharPtr() { std::string someString; // Some processing! return someString.c_str(); }
これに関する問題このアプローチは、 std::string someString が破棄されると、返された char ポインタが無効になり、解放されたメモリを指すというものです。この問題は、c_str():
std::string returnString() { std::string someString("something"); return someString; }
ではなく std::string 自体を返すことで解決できます。ただし、返された std::string から char ポインタにアクセスする場合は注意が必要です。たとえば、次は正しくありません:
const char *returnedString = returnString().c_str();
返された std::string が破棄されると、returnedString はぶら下がったままになり、returnedString.c_str() にアクセスしようとすると、未定義の動作が発生します。代わりに、std::string 全体を保存します:
std::string returnedString = returnString(); // ... use returnedString.c_str() later ...
このアプローチにより、保存された std::string が存在する限り char ポインタが有効なままになります。
以上がstd::string から定数 Char ポインタを安全に返す方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。