谁能解释一下或给我指出一个引用资料,解释为什么在第一行打印的代码片段中包含整个单词 hello
,而在第二行中它只包含字母他
?我认为无论换行转义如何,退格转义字符都会删除最后三个字母。我已阅读有关 printf
的 GNU 文档,但找不到任何要点。
int main(void)
{
printf("hello\b\b\b\n");
return 0;
}
int main(void)
{
printf("hello\b\b\b");
return 0;
}
最佳答案
这实际上不是关于 C 或 printf 的问题。在每种情况下,代码都完全按照它所说的去做:在第一个示例中,它输出 9 个字符 h e l l o\b\b\b\n
,在第二个示例中,它同样输出 8 个字符。如果您将标准输出写入一个文件,那么该文件将包含什么内容。但是如果你写到一个终端,你的终端可能会通过退格处理 \b
,所以你的问题实际上是关于你的终端的。你还没有说你使用的是什么终端。
退格字符的一种常见行为方式是将光标向左移动一个位置,但实际上并不删除该位置的字符。下一个字符输出将覆盖它。
在您的第一个示例中,您将光标移回第一个 l
,但是您永远不会在它或任何其他字符上写任何东西。然后 \n
不会改变屏幕上的任何字符,只是将光标移动到下一行。所以您仍然会在前一行看到 hello
。
在您的第二个示例中,当您的程序终止时,光标留在第一个 l
上。所以下一个将输出写入终端的程序将覆盖该字符(除非下一个程序的第一个写入是 \n
或类似的东西)。下一个程序可能是您的 shell,因此您的 shell 提示符中的字符可能会覆盖 llo
,因此您看不到它们。
关于c - 在 C 中将模板字符串中的\b 处理为 printf,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44875513/