Vous invoquez certainement un comportement indéfini (ou au moins non spécifié). Vous déclarez un tampon, puis transmettez-le via setvbuf
à stdout
. À partir de ce moment-là, le tampon est détenu par stdout
et non plus vous. Cela signifie que vous ne pouvez plus y accéder. Mais c'est exactement ce que vous faites.
Je ne peux pas le prouver à partir du libellé de la norme, mais il y a certainement une combinaison de paragraphes qui mène à ma conclusion.
Mise à jour: ISO C99 dit dans 7.19.5.6p2 sur la fonction setvbuf
: Le contenu du tableau à tout moment sont indéterminées. Donc, ce que vous voyez est juste une coïncidence. Vous pouvez également voir autre chose, il n'y a aucune garantie de l'ISO C99 seul.
Mise à jour 2: Étant donné que le contenu du tableau est indéterminé, ils peuvent également tous être des caractères non nuls. Et dans ce cas, buf
ne contient plus une chaîne plus. Par conséquent, vous appelez clairement undefined behavior.
À l'avenir, veuillez simplement copier et coller votre code dans votre question plutôt que de capturer votre éditeur à l'écran. De cette façon, si quelqu'un veut essayer de compiler votre programme, il n'aura pas à retaper tout votre code. – meagar
Vous avez raison, je promets de ne pas le faire – Tracy