打印到文件时退格字符不起作用

时间:2013-05-19 05:25:41

标签: c++ c gcc command-line

我有简单的C程序 -

main()
{
    printf("Foo\b");

}

它在终端上打印Fo(如预期的那样)。

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

./a.out >outfile

outfile已写入Foo

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


更新:请注意 - Foo后面是outfile中的空格。那是为什么?

2 个答案:

答案 0 :(得分:4)

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

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

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

答案 1 :(得分:0)

如果您cat outfile,您将看到相同的结果,因为该文件中包含退格控制字符,并且将在终端上按预期运行。正如Brian在评论中提到的那样,文本编辑器可能会或可能不会使用转义字符做一些聪明的事情。