在fprintf语句中遇到\ b转义序列的麻烦..?

时间:2014-11-25 03:57:36

标签: c file formatting printf

我正在尝试编写一个程序,该程序从文件中读取学生编号(7位数字符串),用x替换前3位数字,然后将结果打印到新文件中。我可以使用printf语句(打印到屏幕)完成我正在尝试做的事情,但是当使用fprintf时,新文件中的结果不是我想要的。以下是相关的代码行:

studentno=1234567
fprintf(fp2, "%s\b\b\b\b\b\b\bxxx\t", studentno);

printf语句中,结果为xxx4567,如预期的那样。但是,在fprintf语句中,当我打开新文件时,它会显示1234567xxx。我真的不确定为什么,因为'\n''\t'等其他转义序列在fprintf语句中的作用与printf语句中的转义序列相同。如果有人能指出我为什么会这样做的正确方向,那就太好了。

3 个答案:

答案 0 :(得分:0)

您在FILE类型上使用它。 如果它是一个文件,它将由文本编辑器完成它想要的操作。如果它真的是另一端的终端,你需要检查它是否正确处理这些转义字符。

甚至可能不允许使用printf函数族的某些转义字符,但我不确定。如果你能在我看来一起避免它们,那就更容易了。

无论如何,我建议只重写printf或fprintf语句来执行此操作:

fprintf(fp2, "xxx%s", studentno + 3);

这将写入xxx然后从第4个偏移量开始从studentno写入chars。更容易,肯定会工作!

答案 1 :(得分:0)

当我打开新文件时,

不确定你的意思"。你用编辑器打开它吗?猫?我怀疑vi newfile可能显示不同于cat newfile。因为不同的软件(规范stdout与你的文本编辑器)可能会以不同的方式显示\ b或根本不显示。

无论如何,如果你试图在屏幕上隐藏studentno的前3位数字,使用退格键是不好的方法。不可靠和脆弱。黑客可以通过将输出重定向到文件来轻松获取完整数量,并且无法阻止它。我同意rowan.G的回答。

答案 2 :(得分:-1)

混合printf / fprintf和终端代码的格式代码,指示终端做某事。

这里列出了f / printf的允许格式代码,你会注意到\ b不是其中之一:

printf format codes references

当您显示在终端上创建的字符串时,终端正在将\ b应用于退格并有效地显示所需的字符串,但是当您将其打印到文件时,它具有没有效果。有很多方法可以做你想要的,但我建议你只需将文件中的学号作为字符串读取,然后在数组中操作它。