使用fput将多行写入文件

时间:2015-09-01 10:37:30

标签: c

    int main(int argc, char *argv[]) {
    FILE *datafile, *outputfile;
    char c, *line, *line1, *line2, *key, *search;
    int i=0;
    tree_t *tree;


    if(argc > 4){
        printf("Too many arguments");
        exit(1);
    }

    datafile = fopen(argv[1], "r");
    outputfile = fopen(argv[2], "w");
    line = malloc(sizeof(char));
    tree = make_empty_tree();

    while((c=getc(datafile)) != EOF) {
         *(line+i) = c;
         i++;
         line = realloc(line, (i+1)*sizeof(char));
         if(c == ';'){
             *(line+i) = '\0';
             i=0;
             line1 = line;
             line = malloc(sizeof(char));       
         } else if(c=='\n') {
             line2 = line;
             tree = insert_tree(tree, line1, line2);
             i=0;
             line = malloc(sizeof(char));

         }

    }


    /*traverse_tree(tree);*/
    i=0;
    key = malloc(sizeof(char));
    while((c = getchar())!=EOF){
        *(key+i) = c;
        i++;
        key = realloc(key, (i+1)*sizeof(char));
        if(c == ';') {
            *(key+i) = '\0';
            i=0;
            search = search_tree(tree, key);
            fputs(search, outputfile); 

        }
    }  


    fclose(datafile);
    fclose(outputfile);


    return 0;
}

在第二个while循环中 search_tree函数在树中搜索参数“key” 并将搜索结果输出到指针变量搜索 然后使用fputs

写入文件

我希望能够将多个搜索结果写入文件 但每次运行fputs它都会删除之前的搜索结果并写入一个新的

我如何存储所有搜索结果?

1 个答案:

答案 0 :(得分:2)

如果你想避免每次运行程序时都覆盖文件,那么你必须打开文件"追加"模式:

outputfile = fopen(argv[2], "a" );

此外:

  • 检查fopen成功总是更好,即使在测试/示例代码中也是如此(否则您将有未定义的行为来访问空指针)。
  • 正如迈克尔沃尔兹所指出的那样,realloc及时使用一个字母是非常低效的。
  • realloc可能会失败,你必须在将它分配给同一个指针之前检查它的结果是否为NULL,否则会有内存泄漏。