In the following code I have used cout<<(char*)NULL;
after this line, my program printing nothing to the output screen. Does it mean I have done close(1)
with cout
here? What is actually happening here? Is this a bug? Please share your thoughts.
#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??
}
I have tried this with both gcc and DevCpp compilers, same behavior observed.
cout << (char *)NULL
causes undefined behaviour. Anything could happen. (The compiler assumes you don't do this when it generates assembly code).
A char *
argument used here must point to a character in a null-terminated string.
Here you sets the badbit
on the stream which causes nothing to be printed after cout<<(char*)NULL;
if (!__s)
__out.setstate(ios_base::badbit);
The standard says: requires: shall not be a null pointer
. So your program definitely has the undefined behavior and it should be fixed. You can clear the bad bit by using cout.clear()
.
In your case, cout<<(char*)NULL;
causes undefined behavior. But GCC plays it safely.
Hope this helps!
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With