为什么\ b在字符串的中间使用而在末尾使用却不删除\ b前面写的一个字符?

时间:2018-07-21 14:47:15

标签: c gcc output backslash

在字符串中使用\b时。

int main (void)
{
    printf("asdfhjk\bll");
    return 0;
}

输出:

asdfhjll

在字符串的末尾使用\b时。

int main (void)
{
    printf("asdfhjkll\b");
    return 0;
}

输出:

asdfhjkll

为什么最后一个字符l没有被\b删除。根据{{​​1}}的工作,\b前面的字符被删除。在字符串的中间使用时,它可以正常工作,但在末尾使用时,则不能正常工作。为什么?

2 个答案:

答案 0 :(得分:4)

字符\b是一个退格字符。 它将光标向后移动一个位置,而无需在屏幕上写入任何字符

请考虑您的第一个示例:asdfhjk\bll。在“打印”退格字符之前,屏幕如下所示:

asdfhjk
       ^

...其中^指示光标位置。并且在打印\b之后,就完成了

asdfhjk
      ^

最后两个字符覆盖k

asdfhjll
        ^

对于第二个示例asdfhjkll\b。在打印\b之前:

asdfhjkll
         ^

及之后:

asdfhjkll
        ^

不会删除任何字符,但是光标已向后移了一个字符。如果您打印其他任何内容,则最后一个l将被覆盖。

答案 1 :(得分:1)

\b的意思是“将输出位置向后移动一个字符”。所以当你输出例如写入x\byx,然后在刚刚写入的x之前倒退输出游标,然后y覆盖x

但是,当\b之后没有输出时,光标仅停留在原处。然后,进一步的输出将覆盖最后写入的可见字符。