我有一个程序正在创建多个文件。每个正在创建的文件都有一个函数。在每个函数中,都是完全相同的代码来创建文件名,打开/创建文件进行写入,设置其权限并在最后关闭文件。我决定创建一个函数来打开文件并关闭文件,这样我就可以调用它而不是每次使用相同的代码。以前的代码在每个函数中看起来如下所示:fopen上的Seg错误/ fclose
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);
}
}
它,只要我得到第一个fprintf中声明WriteFile1()赛格故障。我用FILE变量做错了什么吗?它似乎应该像以前一样工作。唯一的区别是文件名字符串的malloc,我将其作为名称传入,并将实际值用引号引起来。
谢谢
我看不出你原来的代码可能如何工作,因为你从来没有真正设置文件名你malloc。 – 2011-06-13 15:19:45
如果WriteFile1()中有fprintf语句,请您向我们展示代码? – razlebe 2011-06-13 15:22:05
如果fopen失败,你*必须*包含系统错误(例如,来自perror()或strerror())以产生有用的错误消息。 “无法打开文件。正在退出...”不是有用的错误消息。 – 2011-06-14 04:06:47