fputs造成问题

时间:2011-03-14 09:48:06

标签: c file

fseek(ofile, 13, SEEK_SET);
fputs("\t", ofile);

do
{
     ch = getc(ofile);
     printf("%c", ch);

     if(ch == '\n') {
         fseek(ofile, 13, SEEK_CUR);
         fputs("\t", ofile);
     }
} while(ch != EOF);

我编写了这个程序来操作文件并在每行中的特定位置后插入\ t。 每当我使用第二个fputs时,它都会使文件无法读取。为什么会这样?

1 个答案:

答案 0 :(得分:4)

您可能想要了解的一些事项:

  • fputs不会插入任何内容,会覆盖那里的任何内容。换句话说, TAB 字符只会覆盖原来的字符。如果你想插入东西,你最好编写一个过滤类型的程序,它将字符从一个文件复制到另一个文件,允许在此过程中进行更改(例如,如果最后一个换行符是13个字符,则插入)。 LI>
  • 您的fseek会更改后续getc操作的当前位置。这意味着您需要注意比预期更短的线条。
  • 您真的应该检查fseekfputs的返回值 - 它们可能会失败。
  • getc之后,文件指针位于 next 字符处,因此请确保它是您感兴趣的换行符之后的十四个字符。
  • 注意文件中的最终换行符。除此之外的搜索13个字节不太可能,并且您无论如何都在进行fputs

如果没有这一切,请使用类似Linuxy的方式以十六进制模式转储修改后的文件:

od -xcb myFileName.txt

并查看各个字节是什么。 gEdit因拒绝甚至包含一个字符的文件而臭名昭着,这就是为什么我将vim用于所有事情的原因: - )