【发布时间】:2021-07-07 10:52:03
【问题描述】:
我想将文件指针作为参数传递给视图函数。然后我想从视图函数中获取输出文件中的数据。但是每次都告诉我找不到文件。
#include<stdio.h>
void view(FILE *file){
char c;
file=fopen(file,"r");
if(file==NULL){
printf("file not found");
}
else{
while(!feof(file)){
c=fgetc(file);
printf("%c",c);
}
fclose(file);
}
}
int main(){
FILE *file;
file=fopen("hello.txt","w");
char s[]="hello world";
fprintf(file,"%s",s);
fclose(file);
printf("Enter 1 to read file");
int n;
scanf("%d",&n);
if(n==1)
view(file);
return 0;
}
【问题讨论】:
-
编译器不会对你大喊大叫吗?因为多想一下在
view中对fopen的调用:file=fopen(file,"r")将FILE *作为文件名传递给fopen真的有意义吗?编译器真的应该抱怨这一点。 -
关于一些不相关的注释,请阅读 Why is “while ( !feof (file) )” always wrong? 并记住
fgetc返回一个int,这对于与EOF的比较很重要你应该有而不是feof。 -
All the big three compilers 发出警告。您应该始终将警告视为必须修复的错误。如果您真的没有收到任何警告,那么您使用的是什么编译器?什么版本的?
-
如果在调用之前关闭文件,为什么要传递
FILE指针?指向文件的指针在关闭后不得用于任何操作。通过它是没有价值的。您应该改为传递文件名。 -
是的,你可以,但这对你代码中的问题没有帮助。也许您打算将文件 name 作为参数传递?那么参数变量应该被命名为不同的名称,而是使用
const char *类型。而且你需要在函数本身中定义FILE *file(全局变量不好)。