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