cout NULL の送信後に出力が消える: 説明と修正
std::cout を使用して文字列を出力する場合、NULL の送信を避けることが重要です議論として。この動作は、後続の cout 出力にアクセスできなくなるという予期せぬ結果を招く可能性があります。
C 標準によれば、NULL ポインタを std::cout に渡すことは未定義の動作です:
template<class traits> basic_ostream<char,traits>& operator<<(basic_ostream<char,traits>& out, const char* s);
"必須: s は null ではありません。"
文字列を取得するために null ポインターを逆参照します。特に空のものは許可されません。したがって、std::cout を使用して NULL 値をストリーミングすると、予期しない動作が発生する可能性があります。
場合によっては、この問題が常に一貫して発生するとは限りません。これは、未定義の動作がさまざまな予期しない形で現れる可能性があるためです。特定の実装では、std::cout が null ポインターを検出し、エラー フラグを設定して、操作を続行する場合があります。ただし、この動作はいつでも変更される可能性があるため、この動作に依存することは強くお勧めできません。
この問題を解決するには、std::cout に NULL を入力しないようにすることが重要です。代わりに、必要に応じて空の文字列をストリーミングすることを検討してください。
std::cout << "This line shows up just fine" << std::endl; const char* some_string = a_function_that_returns_null(); if (some_string == 0) std::cout << "Let's check the value of some_string: " << (some_string ? some_string : "") << std::endl; std::cout << "This line and any cout output afterwards will show up" << std::endl;
この例では、some_string が NULL の場合を処理するために三項演算子が使用され、代わりに空の文字列をストリーミングします。
あるいは標準ライブラリには文字列操作のためのさまざまなメカニズムが用意されているため、null ポインターが存在する場合でも、信頼性の高い出力を確保するには std::fixed の使用を検討してください。
以上がNULL を送信した後に `std::cout` 出力が消えるのはなぜですか?それを修正するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。