C 使用FPUT将多行写入文件

C 使用FPUT将多行写入文件,c,C,在第二个while循环中 search_tree函数搜索树中的参数“key” 并将搜索结果输出到指针变量搜索 然后使用FPUT写入文件 问题是我希望能够将多个搜索结果写入文件 但每次fputs运行时,它都会删除以前的搜索结果并写入新的搜索结果 如何存储所有搜索结果???如果要避免每次运行程序时文件被覆盖,则必须以“附加”模式打开文件: 此外: 即使在测试/示例代码中,也最好检查fopen是否成功(否则您将有访问空指针的未定义行为) 正如Michael Walz所指出的,realloc“一次只使

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

问题是我希望能够将多个搜索结果写入文件 但每次fputs运行时,它都会删除以前的搜索结果并写入新的搜索结果


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

如果要避免每次运行程序时文件被覆盖,则必须以“附加”模式打开文件:

此外:

  • 即使在测试/示例代码中,也最好检查fopen是否成功(否则您将有访问空指针的未定义行为)
  • 正如Michael Walz所指出的,
    realloc
    “一次只使用一个字符是非常低效的
  • realloc可能会失败,在将其分配给同一指针之前,必须检查其结果是否为NOTNULL,否则会出现内存泄漏

您是如何申报
c
realloc
ating每个字节都非常高效。您在哪里打开文件?显示更多代码。
c
必须声明为
int
;否则,
while((c=getc())!=EOF)
是一个等待发生的错误对用户(和我)来说都是无用的,因为它没有指示应用程序应该如何从命令行启动。建议类似于:
printf(“用法:%s…\n”,argv[0])”
始终检查malloc()和函数族返回的值(!=NULL),以确保操作成功表达式:
sizeof(char)
定义为1,对传递给malloc/realloc的参数绝对没有影响。它还使代码混乱。建议从传递给realloc()的参数中删除该表达式发布的代码:1)缺少调用函数的原型2)缺少头文件的#include语句3)在退出程序之前不会将所有malloc的内存区域传递给free()。
    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;
}
outputfile = fopen(argv[2], "a" );