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
操作的当前位置。这意味着您需要注意比预期短的线路。 - 您确实应该检查
fseek
和fputs
的返回值 - 它们可能会失败。 - 在
getc
之后,文件指针位于下一个 字符处,因此请确保它是您感兴趣的换行符后的十四个字符。< - 注意文件中的最后一个换行符。超出此范围的 13 个字节的搜索不太可能起作用,而且无论如何您都在执行
fputs
。
如果所有这些都失败了,使用类似 Linuxy 的东西以十六进制模式转储修改后的文件:
od -xcb myFileName.txt
并查看各个字节是什么。 gEdit
因拒绝甚至有一个字符不正常的文件而臭名昭著,这就是为什么我对所有内容都使用 vim
:-)
关于c - fputs 制造问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5296988/