L'utilisation de \b et \r dans C
\b
et \r
sont rarement utilisés dans la pratique. Je viens de constater que j'ai mal compris ces deux séquences d'échappement. Un test simple:
printf("foo\bbar\n");
Je m'attendais à la sortie fobar
, parce que \b
sera de retour arrière du curseur, et b
va remplacer la deuxième o
, mais au lieu de cela il sorties: foobar
La même chose est avec \r
:
printf("foo\rbar\n");
J'ai pensé \r
de déplacer le curseur au début de la ligne courante, de sorte bar
remplacera foo
, de sorte que le résultat final devrait être bar
. Cependant, il fait des sorties:
foo
bar
- Où est la question?
- quelle plate-forme êtes-vous?
- ce n'
\b
et\r
faire exactement? - stackoverflow.com/questions/6792812/...
- J'ai utilisé une ligne de gcc compileonline.com/compile_c_online.php
- Ils ne font rien. Ils sont juste des personnages. Mais quoi que vous écrire ces caractères peuvent agir d'une certaine façon lorsqu'il reçoit ces personnages. par exemple, si vous écrivez ces caractères dans un fichier, le personnage se retrouve dans le fichier. Si vous l'écrivez sur un terminal/console, le terminal peut effacer un caractère lorsqu'il voit le \b Certains terminaux ferais, que certains ne le serait pas.
- Dans la chaîne, il ist juste ASCII 8, et 13 CR. Un ancien puce console pourrait avoir interprété ces commandes (voir alse Unix boucles). En général
\r
pourrait interprété comme saut de ligne. En fait, vous avez trouvé les deux plus tous les caractères inutiles.
Vous devez vous connecter pour publier un commentaire.
Les caractères vont être envoyer juste comme ça pour le périphérique de sortie (dans votre cas, probablement un émulateur de terminal).
C'est jusqu'à la borne de mise en œuvre puis la façon dont ces personnages s'affiche. Par exemple, une cloche (
\a
) pourrait déclencher un bip sonore sur certains terminaux, un flash de l'écran sur les autres, ou il sera complètement ignoré. Tout dépend de la façon dont le terminal est configuré.Les personnages sont exactement comme indiqué -
\b
équivaut à un code de caractère de0x08
et\r
équivaut à0x0d
. La chose qui varie, c'est la façon dont votre OS réagit à ces personnages. De retour lors de l'affiche ont été en essayant d'imiter un vieux téléscripteur ces actions ont été normalisés, mais ils sont moins utiles dans les environnements modernes et la compatibilité n'est pas garantie.\b
sera0x08
seulement si0x08
correspond au caractère de retour arrière dans l'exécution de jeu de caractères (ce qui est vrai en ASCII et Unicode et d'autres jeux de caractères). Si l'exécution de votre jeu de caractères EBCDIC, cependant, alors\b
correspondance\0x16
(si je peux faire confiance les tables de caractères, je suis la recherche en ligne).L'interprétation de l'arrière et des caractères retour chariot est à gauche pour le logiciel que vous utilisez pour l'affichage. Un émulateur de terminal, lors de l'affichage de \b " déplace le curseur d'un pas en arrière, et lors de l'affichage \r au début de la ligne. Si vous imprimez ces personnages quelque part d'autre, comme un fichier texte, le logiciel peut choisir. faire quelque chose d'autre.
J'ai expérimenté beaucoup de la barre oblique inverse les caractères d'échappement.
\n
qui est une nouvelle ligne d'alimentation peut être mis n'importe où à apporter l'effet. Une chose importante à retenir lors de l'utilisation de ce caractère est que le système d'exploitation de la machine que nous utilisons pourrait affecter la sortie. Comme exemple, je l'ai imprimé un tas de caractère d'échappement et affiche le résultat comme suit pour preuve que le système d'exploitation incidence sur la sortie.Code:
Pour la signification de chaque personnage décrit dans C Primer Plus, ce que vous attendiez est une "bonne" réponse. Il devrait être vrai pour certaines architectures informatiques et les compilateurs, mais, malheureusement, pas le vôtre.
J'ai écris un programme en c pour répéter votre test, et obtenu que la "bonne" réponse. J'ai été à l'aide de Mac OS et de la gcc.
Aussi, je suis très curieux de savoir qu'est-ce que le compilateur que vous utilisez. 🙂