Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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

Tags:

c++

unix

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.

like image 270
Renuka Avatar asked Apr 25 '14 02:04

Renuka


2 Answers

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.

like image 200
M.M Avatar answered Sep 27 '22 17:09

M.M


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!

like image 31
sree Avatar answered Sep 27 '22 17:09

sree