c - fputs 制造问题

标签 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 时,它都会使文件不可读。为什么会这样?

最佳答案

一些你可能想看的东西:

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

如果所有这些都失败了,使用类似 Linuxy 的东西以十六进制模式转储修改后的文件:

od -xcb myFileName.txt

并查看各个字节是什么。 gEdit 因拒绝甚至有一个字符不正常的文件而臭名昭著,这就是为什么我对所有内容都使用 vim :-)

关于c - fputs 制造问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5296988/

相关文章:

r - R中的for循环问题

c - 在 C 中写入和读取结构体?

c - c中的链接列表指针转换异常。指针从不存在的位置获取地址

c++ - 如何使用 cmake 在 'make install' 期间复制/移动一组特定文件?

c - 二维数组中数组的名称指向什么?

php - 什么是语言结构?它是如何(理论上)在 C 中实现的?

java - 使用 Java 7 API 逐字节读取文件

c - 如何读取文件直到某个字符或 EOF?

Android读取多个文件最快的方法?

c - 跟踪线程 id - 脏修复?