为什么将 nullptr 值传递给 ostream 会停止打印到 stdout?[复制]

why does passing a nullptr value to an ostream stop printing to stdout? [duplicate]

提问人:ajoseps 提问时间:2/23/2023 更新时间:2/23/2023 访问量:81

问:

$ g++ --version
g++ (GCC) 9.2.0
Copyright (C) 2019 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.    
$ g++ test.cpp -o test -g

test.cpp

#include <iostream>

int main() {
  const char * c = nullptr;
  std::cout << "testing: " << c << std::endl;
  std::cout << "why does this not print?" << std::endl;
  return 0;
}

运行:test

$ ./test
testing: $ echo $?
0

似乎阻止了进一步打印,但我不确定为什么。似乎没有被处理,如果我只是通过而不是.nullptrstdoutstd::endl\nstd::endl

C++ null 标准输出 ostream

评论

0赞 NathanOliver 2/23/2023
垃圾进,垃圾出。你答应了一个 c 字符串,但它一无所获,现在你有未定义的行为。cout
1赞 273K 2/23/2023
你不传递 nullptr,它有自己的类型,你传递一个 null 指针。en.cppreference.com/w/cpp/io/basic_ostream/operator_ltlt2 如果 s 为 null 指针,则行为未定义。
0赞 sweenish 2/23/2023
中断流后,如果您不修复它,您就不能指望它能正常工作。它们不能自我修复。
2赞 273K 2/23/2023
@AdrianMole 您使用了错误的引用。它说 Character 和字符串参数(例如,char 或 const char* 类型)由 operator<< 的非成员重载处理。
1赞 user12002570 2/23/2023
请参阅dupe:为什么std::cout输出在发送NULL后完全消失

答: 暂无答案