複数のファイルを作成しているプログラムがあります。作成するファイルごとに関数があります。各関数内には、ファイル名を作成し、書き込み用にファイルを開いて作成し、そのアクセス許可を設定し、最後にファイルを閉じるためのまったく同じコードがあります。毎回同じコードを使用する代わりに、ファイルを開いて閉じる関数を作成して、それを呼び出すことができるようにすることにしました。以前は、各関数のコードは次のようになりました。
void WriteFile1(char *name) {
FILE *file;
char *filename; //This is being malloc'ed because it initially consisted of multiple strings
if (!(filename = malloc(sizeof(char *) * (strlen(name) + 1)))) MallocError();
if (!(file = fopen(filename, "w"))) {
fprintf(stderr, "Unable to open %s. Exiting \n", filename);
exit(1);
}
fchmod(fileno(file), S_IRUSR | S_IWUSR | S_IXUSR | S_IRGRP | S_IXGRP | S_IROTH);
//a bunch of fprintf statements here
if (fclose(file)) {
fprintf(stderr, "Error closing %s. Exiting...\n", filename);
exit(1);
}
}
これは完全にうまくいきました。問題はありませんでした。これで、次のようになります。
void WriteFile1() {
FILE *file;
OpenFile(file, "filename.asdf");
//fprintf statements
CloseFile(file, "filename.asdf");
}
void OpenFile(FILE *file, char *name) {
if (!(file = fopen(name, "w"))) {
fprintf(stderr, "Unable to open %s. Exiting... \n", name);
exit(1);
}
fchmod(fileno(file), S_IRUSR | S_IWUSR | S_IXUSR | S_IRGRP | S_IXGRP | S_IROTH);
}
void CloseFile(FILE *file, char *name) {
if (fclose(file)) {
fprintf(stderr, "Error closing %s. Exiting...\n", name);
exit(1);
}
}
WriteFile1()の最初のfprintfステートメントに到達するとすぐに、障害が発生します。FILE変数で何か間違ったことをしていますか?以前と同じように機能するはずです。唯一の違いは、ファイル名文字列のmallocです。これは、代わりに名前として渡し、実際の値を引用符で囲んでいます。
ありがとうございました