退格字符在打印到文件时不工作
Backspace character not working when printing to a file
我有一个简单的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在评论中提到的,文本编辑器可能会也可能不会对转义字符进行智能处理。
相关文章:
- 树莓上的 Libtorch 无法加载 pt 文件,但在 ubuntu 上工作
- 我的文件无法正常工作,无法从C++文件中读取上下文
- 我的 SDL2 程序需要哪些二进制文件,以便它在另一台未安装 SDL2 的计算机中工作
- 有没有办法关闭文件? fclose 不能很好地工作
- G++ 在生成文件中使用时停止工作
- 代码作为 C 文件工作,但不作为C++文件,错误:'__builtin_types_compatible_p'未在此范围内声明
- 无法使用 Visual Studio 启动 DirectX 11 可执行文件,生成工作正常
- 使用.cpp文件让 RcppArmadillo 在 Rstudio 中工作
- 读取二进制文件大小的短自上周以来停止工作
- 我的 PowerShell 脚本无法按预期工作(用于编译C++文件)
- 不同文件的类,如何使其工作?
- Makefile在Linux中工作,但在Windows下不起作用,在子目录中找不到文件
- C Visual Studio代码不使用工作区中的单个文件夹编译
- 在循环工作时,首先将两个文件读为向量,但仅次于迭代一次
- 在Qt中使用工作线程将数据写入文件的正确方法是什么?
- OpenCV:文件存储操作员">>"在一个项目中工作,但不在另一个项目中工作(在同一类上)
- 仅一个功能的链接错误.在同一类和CPP文件中具有相似签名的其他函数工作正常
- ios::trunk如何在C++中为二进制文件工作
- 无法使我的生成文件工作
- 为什么我的程序不能作为exe文件工作?