【发布时间】:2013-05-13 23:02:50
【问题描述】:
我有简单的 C 程序-
main()
{
printf("Foo\b");
}
它在终端上打印Fo(如预期的那样)。
但是当我通过重定向 I/O 来调用这个程序时-
./a.out >outfile
outfile 中写有Foo。
为什么会这样?以及如何将退格字符设置为文件时将其打印到标准输出。
更新:请注意 - Foo 在输出文件中后跟一个空格。这是为什么呢?
【问题讨论】:
-
我将假设您正在使用编辑器打开文件并且不明白编辑器不是终端并且控制字符是不可打印的?
-
如果您查看
stty -a的输出,您可能会发现其中一个选项集是echoe,它会在“擦除”(通常是“退格”)时擦除前一个字符字符被输出。这将解释您看到的Fo输出。 -
"Foo 后面跟着一个空格在 outfile" -- 不,不是。
-
你如何确定
outfile里面有Foo(这实际上是正确的;它应该包含Foo后跟一个退格(不是空格);程序打印了一个退格,所以输出包含一个退格)。一种可能的工具是od -c outfile,它应该显示文件包含4 个字符,F、o、o和'\b。在终端输入时发生的情况与将文件 cat 到终端时得到的输出无关。 -
@ShuklaSannidhya "what follow Foo" - 一个退格键,如果您真的注意收到的回复,您就会知道。 “我能看到的一切”——这与文件中的内容无关。让我们这样说吧:如果文件中真的有退格键,您会期望在“Foo”之后看到什么?提示:退格没有关联的字形,所以必须替换一些东西。
标签: c++ c gcc command-line