为了账号安全,请及时绑定邮箱和手机立即绑定

“退格”转义字符'\ b':意外行为?

“退格”转义字符'\ b':意外行为?

C
开满天机 2019-08-27 10:17:45
“退格”转义字符'\ b':意外行为?所以我终于通过K&R阅读,并且我在前几页中学到了一些东西,即有一个退格转义字符\b。所以我去测试它,并且有一些非常奇怪的行为:#include <stdio.h>main (){     printf("hello worl\b\bd\n");}输出是hello wodl有谁能解释一下?
查看完整描述

3 回答

?
Qyouu

TA贡献1786条经验 获得超11个赞

您的结果将根据您所使用的终端或控制台程序类型而有所不同,但是,大多数\b是非破坏性退格。它向后移动光标,但不会删除那里的光标。

因此对于该hello worl部分,代码输出

你好
          ^

...(^显示光标所在的位置)然后输出两个\b字符,将光标向后移动两个位置而不擦除(在终端上):

你好
        ^

请注意,光标现在位于r。然后它输出d,覆盖r并给我们:

你好wodl
         ^

最后,它输出\n,这是一个非破坏性换行(同样,在大多数终端上,显然包括你的),所以l保持不变,光标移动到下一行的开头。


查看完整回答
反对 回复 2019-08-27
?
米琪卡哇伊

TA贡献1998条经验 获得超6个赞

..........^ <=指向“打印头”的指针
            /* part1 */
            printf("hello worl");
你好
          ^ <=指向“打印头”的指针
            /* part2 */
            printf("\b");
你好
         ^ <=指向“打印头”的指针
            /* part3 */
            printf("\b");
你好
        ^ <=指向“打印头”的指针
            /* part4 */
            printf("d\n");
你好wodl^ <=指向下一行“打印头”的指针


查看完整回答
反对 回复 2019-08-27
?
慕桂英546537

TA贡献1848条经验 获得超10个赞

如果你想要一个破坏性的退格,你需要类似的东西

"\b \b"

即退格,空格和另一个退格。


查看完整回答
反对 回复 2019-08-27
  • 3 回答
  • 0 关注
  • 673 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信