退格字符在打印到文件时不工作

Backspace character not working when printing to a file

本文关键字:文件 工作 打印 字符      更新时间:2023-10-16

我有一个简单的C程序-

main()
{
    printf("Foob");
}

在终端上打印Fo(如预期)。

但是当我通过重定向I/O调用这个程序时-

./a.out >outfile

outfile中有Foo

为什么会这样?当设置为文件时,如何将退格字符打印到标准输出。


UPDATE:请注意- Foo在outfile中后跟一个空格。为什么呢?

计算机倾向于为每个字符使用不同的数字来表示文本-例如,使用ASCII约定,其中具有数字值8的字符是退格,大写字母从65开始,小写字母从97开始等....因此,您的程序正在生成四个字符的输出:F、o、o和backspace—在屏幕上您只看到F和o,因为您的终端程序将backspace解释为备份光标和删除最后写入字符的命令。如果您使用其他程序检查outfile,您可能仍然会看到第二个0和退格:例如在Linux上,您可以使用cat -vt outfile

文件没有将退格解释为删除先前文本的命令的概念,尽管如果文件稍后连接到终端,它应该与程序运行时完全相同,而不重定向到文件。

无论如何,如果你想备份,你需要使用file命令查找一个字符,然后从那里截断或覆盖。它不能通过shell重定向完成-您需要从程序中打开和控制文件。

如果您执行cat outfile,您将看到相同的结果,因为文件中有退格控制字符,并且在终端上的行为与您所期望的一样。正如Brian在评论中提到的,文本编辑器可能会也可能不会对转义字符进行智能处理。