¿”Cout << (char *) NULL" hace "close (1)" aquí?

En el siguiente código he usado cout<<(char*)NULL; después de esta línea, mi progtwig no imprime nada en la pantalla de salida. ¿Significa que he hecho close(1) con cout aquí? ¿Qué está pasando aquí realmente? ¿Es esto un error? Por favor comparte tus pensamientos.

 #include 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?? } 

He intentado esto con los comstackdores gcc y DevCpp, observándose el mismo comportamiento.

Aquí se configura el badbit en la badbit que no imprime nada después de cout<<(char*)NULL;

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

La norma dice: requires: shall not be a null pointer . Por lo tanto, su progtwig definitivamente tiene el comportamiento indefinido y debe ser arreglado. Puede borrar el bit malo utilizando cout.clear() .

En su caso, cout<<(char*)NULL; Causa comportamiento indefinido. Pero GCC lo juega con seguridad.

¡Espero que esto ayude!

cout << (char *)NULL provoca un comportamiento indefinido. Cualquier cosa podría pasar. (El comstackdor asume que no hace esto cuando genera código de ensamblaje).

Un argumento char * utilizado aquí debe apuntar a un carácter en una cadena terminada en nulo.

(char*)NULL no convierte NULL en una cadena como "NULL" si eso es lo que pensabas. NULL es en realidad una macro que se expande a 0 . Convertirlo en char* convierte en un puntero a cero (un puntero nulo). El único problema viene con imprimirlo. Es un comportamiento indefinido intentar imprimir un puntero nulo. Hasta este punto, no puede dar sentido a ningún comportamiento que muestre su progtwig. El hecho de que tu progtwig no haya fallado es una sorpresa para mí.