在C中使用\ b和\ r \n

Yu *_*Hao 44 c

\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)可以在某些终端上触发蜂鸣声,在其他终端上触发屏幕闪烁,或者它将被完全忽略.这一切都取决于终端的配置方式.

  • 你知道如何配置我的,所以它不会忽略铃(\ a)? (6认同)

Mar*_*som 10

字符完全符合记录 - \b等同于字符代码0x08\r等同于0x0d.不同的是你的操作系统对这些角色的反应.当显示器试图模拟旧的电传打字机时,这些操作是标准化的,但它们在现代环境中不太有用,并且不能保证兼容性.

  • 标准没有说出字符代码是什么.只有当`0x08`对应于执行字符集中的退格字符时,`\ b`才会是`0x08`(在ASCII和Unicode以及其他常见字符集中都是如此).但是,如果你的执行字符集是EBCDIC,那么`\ b`将映射到`\ 0x16`(如果我可以信任我在网上找到的字符表). (4认同)

Jon*_*oni 5

退格和回车字符的解释留给您用于显示的软件。终端模拟器,当显示 \b 时会将光标向后移动一步,而当显示 \r 到行首时。如果您在其他地方打印这些字符,如文本文件,软件可能会选择。做别的事情。