#include <stdio.h>
FILE *openfile()
{
FILE *fp1;
fp1 = fopen("test.c","r");
return fp1;
}
int main()
{
char c;
FILE *fp;
int a = 10;
int b = 1000 - a;
printf("Hello\n");
fp = openfile();
fscanf(fp, "%c", &c);
fclose(fp);
printf("%c", c);
}
在上面的程序中,我在一个函数中打开一个文件描述符并传递其他函数。这工作正常。
fp1在本地声明为openfile()函数。因为我们传递地址,从主函数我能够使用文件指针结构。
我的问题是FILE结构存储在哪里?结构的范围是什么?
答案 0 :(得分:6)
它可以存储在任何地方,这取决于运行时库的实现。
通常我希望fopen()
做malloc()
,即在堆上分配FILE
结构,但这不是必需的。例如,如果它被设计为避免堆分配,它也可以发布预先分配的静态结构实例。它只需要支持FOPEN_MAX
个并发文件(必须至少为8个)。
答案 1 :(得分:5)
通常它是在堆上分配的,并且它在任何有权访问它的范围内都有效,直到你调用fopen()
并且它不是文件描述符,它是流。
还要小心,
NULL
是否返回了非fscanf()
指针。"%c"
说明符的简单情况下,也要检查#include <stdio.h>
struct age{
int num;
};
struct name{
char fname [15];
char lname[15];
struct age nameAge;
};
void input(struct name *info[]);
int main (void){
char choice;
char ans;
int i;
struct name record[10];
do{
printf("M E N U");
printf("\n\n[I]nput\n[D]isplay\n[S]earch\n[Q]uit");
printf("\n\nEnter choice: ");
choice=tolower(getche());
system("cls");
switch (choice){
case 'i': input(&record[]);
i++;
break;
case 'd': //function here
break;
case 's': //fucntion here
break;
case 'q': printf("The program will now close.");
break;
default: printf("Invalid character. Try again");
break;
}
getch();
system("cls");
}while (choice!='q');
return 0;
}
void input(struct name *info[]){
//codes here
}
的返回值。