我是C的新手,我正在努力从C程序写入文件。在这个程序中,我打开要读取的文件以及要写入的文件,所以我想我会创建一个为我打开文件的函数。这就是我所做的
FILE *open_file(char* filename, char* mode)
{
FILE *f;
f = fopen(filename, mode);
if(!f)
{
perror(filename)
exit(EXIT_FAILLURE);
}
return f;
}
这就是我调用函数的方式:
FILE *infile = open_file(args.infile_name, "r");
FILE *rm_file = open_file(args.rm_file, "r");
FILE *ex_file = open_file(args.ex_file, "w");
这些函数调用遍布整个程序。首先我在那里硬编码模式“r”,因为我只需要从文件中读取,但现在我也想写一个文件,所以我为应该打开文件的modus做了一个参数。之前它运作良好,但现在它什么也没做。我编译得很好,没有任何错误,警告和/或注释。 valgrind告诉我,一切都很好。有什么想法吗?提前谢谢。
编辑:我忘记添加返回f的行,我现在添加了它。它已经在我的代码中了(当然,你不能让非void函数返回任何内容)。编辑:更好地解释“错误”:我试图从文件中读取文字并将它们存储在像数据结构这样的树中。这工作正常,我可以查找它们,所有这些都没有问题。在向树中添加单词后,我会打印文件中找到的单词数量以及添加到树中的单词数量(我不添加已存在的单词)。现在我想将树导出到一个文件,所以我需要打开一个我可以写的文件。由于我使用只读模式对open_file进行了硬编码,因此我为modus添加了一个参数。但是当我现在运行程序时它没有给出任何错误(因此filepointer不是NULL)但只是说文件中找到0个单词并添加了0个单词。我打印的文件也保持为空。希望这会让它更清晰
答案 0 :(得分:4)
FILE *open_file(char* filename, char* mode)
{
FILE *f;
f = fopen(filename, mode);
if(!f)
{
perror(filename)
exit(EXIT_FAILLURE);
}
}
您的功能不会返回任何内容。只需在最后添加return f;
即可。看起来你的包装器做的工作很少,也可以把这个代码放在你直接使用它的地方,而不是有这个功能。