Quand printf ne parvient-il pas à imprimer?

La fonction printf en c n’imprime pas toujours la sortie à l’écran. Par exemple, si vous oubliez de mettre \ n à la fin de la chaîne, vous imprimez, vous n’obtenez parfois pas l’o / p. Existe-t-il d’autres conditions lorsque printf n’imprime pas? Je me souviens de quelqu’un qui disait qu’il y avait 7 telles conditions. Pouvez vous les gars s’il vous plaît aider.

La sortie standard est un stream mis en mémoire tampon; son vidage n’est pas garanti sauf si une nouvelle ligne est insérée, si le stream est fermé ou si le programme se ferme normalement. Si le programme se termine anormalement, il est possible que le stream ne soit pas vidé. La sortie standard est mise en mémoire tampon, c’est pourquoi une nouvelle ligne le videra. Il y a des tampons qui ne videront pas avec une nouvelle ligne.

Ce n’est pas que printf n’imprimera pas toujours, c’est qu’il n’est pas garanti d’imprimer immédiatement. Cela signifie que si vous l’utilisez à des fins de débogage, vous ne pouvez pas garantir que cela se produira exactement quand cela se produira dans le code. Si vous voulez vous assurer qu’il imprime exactement quand vous avez dit d’appeler fflush(stdout) .

Remarque: En général, vous ne voulez pas utiliser fflush(stdout) moins de déboguer, car il nécessite beaucoup de ressources et si vous vous souciez de la vitesse, il risque de vous ralentir.

Il y a un autre cas spécial que je viens de rencontrer:

Mes variables sont:

 line="-24 hours" line2="24 hours" 

et essaye

 printf $line printf $line2 

Ni fonctionnera. Le second supprime le mot “heures” et le premier interprète -24 comme un drapeau.

Par conséquent, chaque fois que j’utilise printf, je supprimerai tous les caractères dangereux, si possible, en utilisant

 sed -r "s/[/\ #;&~]/_/g" 

Je souhaite que les codes de printf puissent être améliorés par le développeur.

Prends soin

En tant qu’utilisateur 1214634 , stdout est mis en mémoire tampon et ne s’imprime à l’écran que dans certaines conditions. Si vous voulez le forcer à imprimer, vous pouvez appeler fflush (stdout)

j’ai utilisé

 puts(largeSsortingng); 

parce que dans mon cas particulier, printf () vient d’arrêter d’imprimer à mi-parcours. La chaîne entière était là, elle n’a simplement pas été imprimée.

fflush (stdout) n’a pas résolu le problème non plus, une autre printf () sur la ligne suivante a été correctement imprimée.