gpt4 book ai didi

c - 使用 fputs 将多行写入文件

转载 作者:太空宇宙 更新时间:2023-11-04 08:23:25 27 4
gpt4 key购买 nike

    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 时,它都会删除以前的搜索结果并写入一个新结果

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

最佳答案

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

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

另外:

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

关于c - 使用 fputs 将多行写入文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32329490/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com