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时,它都会使文件无法读取。为什么会这样?
答案 0 :(得分:4)
您可能想要了解的一些事项:
fputs
不会插入任何内容,会覆盖那里的任何内容。换句话说, TAB 字符只会覆盖原来的字符。如果你想插入东西,你最好编写一个过滤类型的程序,它将字符从一个文件复制到另一个文件,允许在此过程中进行更改(例如,如果最后一个换行符是13个字符,则插入)。 LI>
fseek
会更改和后续getc
操作的当前位置。这意味着您需要注意比预期更短的线条。fseek
和fputs
的返回值 - 它们可能会失败。getc
之后,文件指针位于 next 字符处,因此请确保它是您感兴趣的换行符之后的十四个字符。fputs
。如果没有这一切,请使用类似Linuxy的方式以十六进制模式转储修改后的文件:
od -xcb myFileName.txt
并查看各个字节是什么。 gEdit
因拒绝甚至包含一个字符的文件而臭名昭着,这就是为什么我将vim
用于所有事情的原因: - )