没有fclose的readFile函数

时间:2016-01-22 16:54:27

标签: c readfile

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

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

  return 0;
}

我不想在此函数中关闭文件,因为在其他函数中我会对此文件进行操作。

typename

如果我尝试关闭这样的文件,我会得到核心转储。但是如果fclose在readFile中,它运行良好。所以可以在没有fclose()?

的情况下编写readFile函数

3 个答案:

答案 0 :(得分:2)

将其更改为:

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;
}

答案 1 :(得分:1)

C中的所有参数都是按值传递的。更改函数中"height" : { "fromHeightPref" : { "id" : "5063114bd386d8fadbd6b009", "value" : "5Ft-2In", "category" : 157 }, "toHeightPref" : { "id" : "5063114bd386d8fadbd6b012", "value" : "5Ft-5In", "category" : 165 } } 的值不会更改调用函数中的值。

您可以返回该值并使用该值:

fp

答案 2 :(得分: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;
  }
}