\b
并且\r
在实践中很少使用.我发现我误解了这两个转义序列.一个简单的测试:
printf("foo\bbar\n");
Run Code Online (Sandbox Code Playgroud)
我期望它输出fobar
,因为\b
将退格光标,b
并将覆盖第二个o
,但它输出:foobar
同样的是\r
:
printf("foo\rbar\n");
Run Code Online (Sandbox Code Playgroud)
我想\r
将光标移动到当前行的开头,因此bar
将替换foo
,因此最终输出应该是bar
.但是,它实际输出:
foo
bar
Run Code Online (Sandbox Code Playgroud)
Com*_*sMS 53
字符将像这样发送到底层输出设备(在您的情况下可能是终端仿真器).
这取决于终端的实现,然后如何实际显示这些字符.例如,铃声(\a
)可以在某些终端上触发蜂鸣声,在其他终端上触发屏幕闪烁,或者它将被完全忽略.这一切都取决于终端的配置方式.
Mar*_*som 10
字符完全符合记录 - \b
等同于字符代码0x08
和\r
等同于0x0d
.不同的是你的操作系统对这些角色的反应.当显示器试图模拟旧的电传打字机时,这些操作是标准化的,但它们在现代环境中不太有用,并且不能保证兼容性.
退格和回车字符的解释留给您用于显示的软件。终端模拟器,当显示 \b 时会将光标向后移动一步,而当显示 \r 到行首时。如果您在其他地方打印这些字符,如文本文件,软件可能会选择。做别的事情。