为什么 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 << std::endl;
函数 a_function_that_returns_null() 返回一个指向字符串 some_string 的 NULL 指针,这违反了 C 标准中运算符
取消引用 NULL 指针来获取字符串(即使是空字符串)在 C 中是未定义的行为。因此,流式传输 some_string 会导致不可预见的操作。
在您的情况下,标准库实现会检测 NULL 指针并在流上设置错误标志,而不是取消引用指针。这可能会导致后续的流操作(例如 std::cout)无法输出任何数据。
观察输出的不一致是由于未定义行为的不可预测性造成的。虽然您的实现目前可以正常处理 NULL 指针,但未来的版本或不同的实现可能会导致崩溃或其他意外行为。
因此,避免将 NULL 值发送到 std::cout 至关重要。如果必须流式传输空字符串,请改用有效但空的 std::string 实例。
以上是为什么 `std::cout` 收到 NULL 指针后停止输出?的详细内容。更多信息请关注PHP中文网其他相关文章!