没有 fclose 的 readFile 函数

readFile function without fclose

我有一个功能可以将新词添加到 .txt 文件中。我仍然需要做一个学习词汇的功能。有几次我必须读取文件,所以我尝试为它创建一个函数。

void readFile(FILE* fp, char *name){
  if((fp=fopen(name,"a"))==NULL) {
    printf("I cannot open file!\n");
    exit(1);
  }
}

而且我不想在这个函数中关闭文件,因为在其他函数中我会操作这个文件。

int main(){
  FILE *file;
  readFile(file,"verbs.txt");
  fclose(file);

  return 0;
}

如果我尝试那样关闭文件,我会得到核心转储。但是,如果 fclose 在 readFile 中,则效果很好。那么可以不使用 fclose() 来编写 readFile 函数吗?

改为:

void readFile(FILE** fp, char *name){
  if((*fp=fopen(name,"a"))==NULL) {
    printf("I cannot open file!\n");
    exit(1);
  }
}

int main(){
  FILE *file=NULL;
  readFile(&file,"verbs.txt");
  //Use the file here after checking for NULL. 
  if (file != NULL)
      fclose(file); //check for NULL before closing.

  return 0;
}

C中的所有参数都是按值传递的。在您的函数中更改 fp 的值不会更改调用函数中的值。

您可以 return 值并改用它:

FILE *readFile(char *name){
  FILE *fp;
  if((fp=fopen(name,"a"))==NULL) {
    printf("I cannot open file!\n");
    exit(1);
  }
  return fp;
}

int main(){
  FILE *file = readFile("verbs.txt");
  fclose(file);

  return 0;
}

如果你想让readFile函数管理它自己的文件指针,我会更像这样:

static FILE *fp = NULL;

void readFile(char *name){
  if((fp=fopen(name,"a"))==NULL) {
    printf("I cannot open file!\n");
    exit(1);
  }
}

void closeFile(){
  if(fp!=NULL) {
    fclose(fp);
    fp = NULL;
  }
}