Output cout Hilang selepas Menghantar NULL: Penjelasan dan Betulkan
Apabila menggunakan std::cout untuk mencetak rentetan, adalah penting untuk mengelakkan penghantaran NULL sebagai hujah. Tingkah laku ini boleh membawa kepada akibat yang tidak dijangka, di mana output cout berikutnya menjadi tidak boleh diakses.
Mengikut piawaian C, menghantar penunjuk NULL kepada std::cout ialah tingkah laku yang tidak ditentukan:
template<class traits> basic_ostream<char,traits>& operator<<(basic_ostream<char,traits>& out, const char* s);
" Memerlukan: s bukan nol."
Membatalkan rujukan batal penunjuk untuk mendapatkan rentetan, terutamanya yang kosong, tidak dibenarkan. Oleh itu, penstriman nilai NULL menggunakan std::cout boleh mengakibatkan tingkah laku yang tidak dapat diramalkan.
Dalam sesetengah kes, isu ini mungkin tidak selalu muncul secara konsisten. Ini kerana tingkah laku yang tidak ditentukan boleh nyata dalam pelbagai cara yang tidak dapat diramalkan. Dalam pelaksanaan tertentu, std::cout boleh mengesan penuding nol, menetapkan bendera ralat dan meneruskan operasi. Walau bagaimanapun, bergantung pada tingkah laku ini amat tidak digalakkan kerana ia boleh berubah pada bila-bila masa.
Untuk menyelesaikan masalah ini, adalah penting untuk mengelak daripada memasukkan NULL ke dalam std::cout. Sebaliknya, pertimbangkan untuk menstrim rentetan kosong jika perlu:
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;
Dalam contoh ini, operator ternary digunakan untuk mengendalikan kes apabila some_string ialah NULL, sebaliknya menstrim rentetan kosong.
Sebagai alternatif , memandangkan perpustakaan standard menyediakan pelbagai mekanisme untuk manipulasi rentetan, pertimbangkan untuk menggunakan std::fixed untuk memastikan output yang boleh dipercayai, walaupun dengan kehadiran null petunjuk.
Atas ialah kandungan terperinci Mengapa Output `std::cout` Hilang Selepas Menghantar NULL, dan Bagaimana Saya Boleh Membetulkannya?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!