2011-03-14 68 views
0
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创建问题

+0

请注意,在你的if语句中,如果(ch =='\ n'),那么你打电话getc连续两次 - 一次在'if'的主体中,然后第二次在'do'块的顶部。 – razlebe 2011-03-14 10:05:25

回答

4

你可能想看看有几件事情:

  • fputs插入什么,那覆盖无论在那里。换句话说,那个TAB字符将会简单地覆盖最初存在的任何东西。如果你想插入东西,你最好写一个过滤器类型的程序,将字符从一个文件复制到另一个文件,允许沿途进行更改(例如,如果最后一个换行符在13个字符前插入)。
  • 您的fseek将更改当前的位置,用于编写后续的getc操作。这意味着你需要注意比预期更短的线条。
  • 你真的应该检查fseekfputs的返回值 - 它们可能会失败。
  • 一个getc后,文件指针是在下一个性格,所以请确保您有兴趣在新行后是一个14字符。
  • 留意该文件中的最后换行符。寻找13个字节以外的东西不会有用,而且你还是在做一个fputs

做不到这一切,转储以十六进制方式修改后的文件与类似的Linuxy:

od -xcb myFileName.txt 

查看各个字节是什么。 gEdit是臭名昭着的拒绝文件,即使有一个字符的重击,这就是为什么我使用vim的一切:-)

+0

我知道什么fput是 – Shweta 2011-03-14 10:14:13

+0

fseek和fputs都工作。文件被操纵,因为我想但它不打开文本编辑器。我认为它会在文件中增加一些东西,导致整个问题 – Shweta 2011-03-14 10:16:02

+1

不要冒犯@Shweta,你来这里寻求帮助。如果你不帮助,我可以在别的地方应用我的努力,只是让我知道。我列入的原因是_因为你使用了“insert”这个词。我不知道你的数据结构是什么,因为你没有提供这个细节。 – paxdiablo 2011-03-14 10:17:43