Est-ce que “cout << (char *) NULL" fait "close (1)" ici?

Dans le code suivant, j’ai utilisé cout<<(char*)NULL; après cette ligne, mon programme n’a rien imprimé sur l’écran de sortie. Est-ce que ça veut dire que j’ai fait close(1) avec cout ici? Qu’est-ce qui se passe réellement ici? Est-ce un bug? S’il vous plaît partager vos pensées.

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

Je l’ai essayé avec les compilateurs gcc et DevCpp, le même comportement a été observé.

Ici, vous définissez le badbit sur le stream qui badbit rien après le cout<<(char*)NULL;

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

La norme dit: requires: shall not be a null pointer . Donc, votre programme a définitivement le comportement indéfini et il doit être corrigé. Vous pouvez effacer le mauvais bit en utilisant cout.clear() .

Dans votre cas, cout<<(char*)NULL; provoque un comportement indéfini. Mais GCC le joue en toute sécurité.

J'espère que cela t'aides!

cout << (char *)NULL provoque un comportement indéfini. Tout peut arriver. (Le compilateur suppose que vous ne le faites pas lorsqu'il génère du code assembleur).

Un argument char * utilisé ici doit désigner un caractère dans une chaîne terminée par un caractère nul.

(char*)NULL ne transforme pas NULL en une chaîne comme "NULL" si c’est ce que vous pensiez. NULL est en fait une macro qui se développe à 0 . Le convertir en char* en fait un pointeur sur zéro (un pointeur nul). Le seul problème vient de l’imprimer. C’est un comportement non défini pour essayer d’imprimer un pointeur nul. Jusqu’à présent, vous ne pouvez pas comprendre les comportements de votre programme. Le fait que votre programme ne soit pas tombé en panne est une surprise pour moi.