"cout<<(char*)NULL"在这里做"close(1)"吗?

Does "cout<<(char*)NULL" doing "close(1)" here?

本文关键字:lt close cout char NULL 在这里      更新时间:2023-10-16

在下面的代码中,我在此行之后使用了cout<<(char*)NULL;,我的程序不会将任何内容打印到输出屏幕。这是否意味着我在这里对cout做了close(1)?这里到底发生了什么?这是一个错误吗?请分享您的想法。

#include<iostream>
using namespace std;
void f(){
    cout<<"nfunn";
}
main(){
cout<<(char*)NULL;
f(); //not getting printed !
cout<<"nhellon";  //not getting printed !
cout<<"hii how are you?"; //not getting printed, why??
}

我已经用 gcc 和 DevCpp 编译器尝试过这个,观察到相同的行为。

cout << (char *)NULL会导致未定义的行为。任何事情都可能发生。(编译器假定您在生成汇编代码时不执行此操作(。

此处使用的 char * 参数必须指向以 null 结尾的字符串中的字符。

在这里,您将badbit设置在流上,这会导致cout<<(char*)NULL;后不打印任何内容

if (!__s)
 __out.setstate(ios_base::badbit);

标准说:requires: shall not be a null pointer。因此,您的程序肯定具有未定义的行为,应该对其进行修复。您可以使用 cout.clear() 清除坏位。

在您的情况下,cout<<(char*)NULL;会导致未定义的行为。但海湾合作委员会可以安全地玩它。

希望这有帮助!

(char*)NULL不会像"NULL"那样将NULL变成字符串,如果你是这样想的。 NULL实际上是一个扩展到0的宏。将其强制转换为 char* 将其转换为指向零的指针(空指针(。唯一的问题是打印出来。尝试打印空指针是未定义的行为。到目前为止,您无法理解程序显示的任何行为。你的程序没有崩溃的事实让我感到惊讶。