没有 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;
}
}
我有一个功能可以将新词添加到 .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;
}
}