在下面的代码中,我在此行之后使用了cout<<(char*)NULL;
,我的程序没有打印到输出屏幕。这是否意味着我已close(1)
与cout
进行了对比?这里到底发生了什么?这是一个错误吗?请分享您的想法。
#include<iostream>
using namespace std;
void f(){
cout<<"\nfun\n";
}
main(){
cout<<(char*)NULL;
f(); //not getting printed !
cout<<"\nhello\n"; //not getting printed !
cout<<"hii how are you?"; //not getting printed, why??
}
我在gcc和DevCpp编译器中尝试过这种方法,观察到相同的行为。
答案 0 :(得分:5)
cout << (char *)NULL
导致未定义的行为。什么事情都可能发生。 (编译器假定您在生成汇编代码时不执行此操作)。
此处使用的char *
参数必须指向以null结尾的字符串中的字符。
答案 1 :(得分:3)
在此处设置流上的badbit
,这会导致在cout<<(char*)NULL;
if (!__s)
__out.setstate(ios_base::badbit);
标准说:requires: shall not be a null pointer
。所以你的程序肯定有未定义的行为,应该修复它。您可以使用cout.clear()
清除坏位。
在您的情况下,cout<<(char*)NULL;
会导致未定义的行为。但GCC安全地播放它。
希望这有帮助!
答案 2 :(得分:2)
(char*)NULL
不会将NULL
转换为"NULL"
之类的字符串,如果这就是您的想法。 NULL
实际上是一个扩展为0
的宏。将其转换为char*
会将其转换为指向零的指针(空指针)。唯一的问题是打印出来。尝试打印空指针是Undefined Behavior。到目前为止,您无法理解您的程序所展示的任何行为。你的程序没有崩溃的事实对我来说是一个惊喜。