c - 为什么\b 在字符串中间使用时会删除在\b 之前写入的一个字符,但在末尾使用时却不会?

标签 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 删除。根据 \b 的工作原理,\b 之前的字符被删除。在字符串中间使用时效果很好,但在末尾使用时效果不佳。为什么?

最佳答案

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

考虑您的第一个示例:asdfhjk\bll。在“打印”退格字符之前,屏幕看起来像这样:

asdfhjk
       ^

... 其中 ^ 表示光标位置。打印完 \b 之后,就是这样

asdfhjk
      ^

最后两个字符覆盖k:

asdfhjll
        ^

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

asdfhjkll
         ^

及之后:

asdfhjkll
        ^

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

关于c - 为什么\b 在字符串中间使用时会删除在\b 之前写入的一个字符,但在末尾使用时却不会?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51457142/

相关文章:

c++ - C++指针,输出

java - 设计链表 - Leetcode #707 - 得到错误的输出

java - 是否可以为android应用程序设置修复进程ID?

c - c中的静态库问题

c++ - 在循环/if 括号后检测分号

c++ - undefined symbol : _ZN7QString13toUtf8_helperERKS_ at runtime

检查 `read` 是否会在不消耗任何数据的情况下返回 EOF

无法使用 mmap/malloc/open 等在 64 位 linux 系统上创建大于 2GB 的文件

c++ - GCC 4.2.2 unsigned short 转换错误

从 pester 测试输出调试信息