我有一个函数可以将新单词添加到.txt文件中。我还是要做一个学习词汇的功能。有几次我必须读取文件,所以我尝试为它创建一个函数。
int main(){
FILE *file;
readFile(file,"verbs.txt");
fclose(file);
return 0;
}
我不想在此函数中关闭文件,因为在其他函数中我会对此文件进行操作。
typename
如果我尝试关闭这样的文件,我会得到核心转储。但是如果fclose在readFile中,它运行良好。所以可以在没有fclose()?
的情况下编写readFile函数答案 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;
}
}