Votre résultat variera en fonction du type de terminal ou de programme de console sur lequel vous vous trouvez, mais oui, la plupart \b
sont un retour arrière non destructif . Il déplace le curseur vers l'arrière, mais n'efface pas ce qu'il y a.
Donc pour la hello worl
partie, le code sort
bonjour le monde
^
... (où ^
montre où se trouve le curseur) Ensuite, il sort deux \b
caractères qui déplace le curseur de deux places vers l'arrière sans effacer (sur votre terminal):
bonjour le monde
^
Notez que le curseur est maintenant sur le r
. Ensuite, il sort d
, ce qui écrase le r
et nous donne:
bonjour wodl
^
Enfin, il sort \n
, qui est une nouvelle ligne non destructive (encore une fois, sur la plupart des terminaux, y compris apparemment le vôtre), de sorte que le l
reste inchangé et le curseur est déplacé au début de la ligne suivante.
r
est remplacé pard
. L'explication est toujours valable.cmd.exe
etcommand.com
ne s’insèrent pas toujours (vous pouvez utiliser la touche Ins pour changer le comportement). J'ai été surpris de constater que Gnome Terminal sur mon ordinateur principal * nix insère toujours, ne semble même pas avoir une préférence pour cela et encore moins basculer en fonction de la touche Ins. Jamais remarqué cela auparavant. De toute évidence, je ne veux presque jamais de dactylographie. :-)la source
'\n'
n'a pas de représentation à l'écran. Ce qui est déjà là reste le même; pas remplacé par un espace ou toute autre représentation de caractère.Si vous voulez un retour arrière destructeur, vous aurez besoin de quelque chose comme
c'est-à-dire un retour arrière, un espace et un autre retour arrière.
la source
\b
signifiera que le prochain caractère de sortie l'écrasera.0x7f
), je suis perplexe.Pas trop difficile à expliquer ... C'est comme taper
hello worl
,d
appuyer deux fois sur la touche fléchée gauche, taper et appuyer sur la touche fléchée bas.Du moins, c'est ainsi que j'en déduis que votre terminal interpelle les codes
\b
et\n
.Redirigez la sortie vers un fichier et je parie que vous obtenez tout autre chose. Bien que vous deviez peut-être regarder les octets du fichier pour voir la différence.
[Éditer]
Pour élaborer un peu, cela
printf
émet une séquence d'octets:,hello worl^H^Hd^J
où^H
est le caractère ASCII # 8 et^J
est le caractère ASCII # 10. Ce que vous voyez sur votre écran dépend de la façon dont votre terminal interprète ces codes de contrôle.la source
Utilisez un seul retour arrière après chaque caractère
printf("hello wor\bl\bd\n");
la source