输出文件用H符号C填充

时间:2017-01-25 10:33:21

标签: c file-io

我正在尝试编写一个程序,我将文字添加到一个文本文件中。此外,我可以删除此文件中的任何单词,并将没有该单词的结果保存到另一个文本文件。但是当我运行它时,我的第二个文本文件用H符号填充,其大小可以超过100 MB。这段代码有什么问题?这是:

int main(void)
{   
int wordNumbers;
int i;
char buf[512];
char word[128];

FILE *o_file = fopen("C:\\atest.txt", "a");
FILE *s_file = fopen("C:\\btest.txt", "w");

printf("please add an amount of words of the dictionary ");
scanf("%i", &wordNumbers);

for (i=0; i< wordNumbers; i++)
{   char word[100] = {0};
    printf("add a word into the dictionary please\n");
    scanf("%s", &word);
fprintf(o_file, "%s\n", word);
}

if(!o_file || !s_file) return -1;
printf("please write down the word you want to delete\n");
scanf("%s",&word);
do    
 {  
    fscanf(o_file, "%511s", buf);
    if(!strcmp(buf, word))
        continue;
    fprintf(s_file, "%s\n", buf);
}
while(!feof(o_file));
fclose(o_file);
fclose(s_file);

   }    

1 个答案:

答案 0 :(得分:2)

您打印到文件o_file以插入字符串。然后,在此之后,您开始从同一个文件中读取

对单个文件的读写都使用相同的文件指针。由于文件指针始终位于这些write之后的文件末尾,因此下一个read应该会失败 - 但是因为您没有检查fscanf的结果,你没有意识到这一点,并且将未初始化的数据写入新文件。

  1. 将新内容写入o_file后,将文件指针重置为fseek (o_file, 0, SEEK_SET)rewind (o_file)开头。
  2. 始终测试fscanf(和scanf)是否返回正确数量的已识别项目。返回值是有原因的。
  3. 另请阅读Why is “while ( !feof (file) )” always wrong?