Rumah >pembangunan bahagian belakang >C++ >Mengapa `std::cout` Berhenti Mengeluarkan Selepas Menerima Penunjuk NULL?

Mengapa `std::cout` Berhenti Mengeluarkan Selepas Menerima Penunjuk NULL?

Barbara Streisand
Barbara Streisandasal
2024-12-23 05:07:24254semak imbas

Why Does `std::cout` Stop Outputting After Receiving a NULL Pointer?

Mengapa Output std::cout Terhalang Selepas Menerima NULL?

Masalah berpunca daripada menghantar nilai NULL ke std::cout. Dalam coretan kod yang disediakan:

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 << std::endl;

Fungsi a_function_that_returns_null() mengembalikan penunjuk NULL kepada rentetan some_string, yang melanggar keperluan dalam piawaian C bahawa argumen kepada operator<< untuk const char* mestilah bukan nol.

Membatalkan penunjuk NULL untuk mendapatkan rentetan, walaupun rentetan kosong, ialah kelakuan tidak ditentukan dalam C . Akibatnya, penstriman some_string menyebabkan tindakan yang tidak dijangka.

Dalam kes anda, pelaksanaan pustaka standard mengesan penunjuk NULL dan menetapkan bendera ralat pada strim dan bukannya membatalkan rujukan. Ini boleh membawa kepada operasi strim seterusnya, seperti std::cout, gagal untuk mengeluarkan sebarang data.

Ketidakkonsistenan dalam memerhatikan output adalah hasil daripada sifat tidak dapat diramalkan kelakuan tidak ditentukan. Walaupun pelaksanaan anda pada masa ini mungkin mengendalikan penunjuk NULL dengan anggun, versi masa hadapan atau pelaksanaan berbeza mungkin menyebabkan ranap sistem atau gelagat lain yang tidak dijangka.

Oleh itu, adalah penting untuk mengelak daripada menghantar nilai NULL ke std::cout. Jika anda mesti menstrim rentetan kosong, gunakan contoh std::string yang sah tetapi kosong.

Atas ialah kandungan terperinci Mengapa `std::cout` Berhenti Mengeluarkan Selepas Menerima Penunjuk NULL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn