其中FILE结构存储在程序中

时间:2016-01-14 16:14:57

标签: c

#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结构存储在哪里?结构的范围是什么?

2 个答案:

答案 0 :(得分:6)

它可以存储在任何地方,这取决于运行时库的实现。

通常我希望fopen()malloc(),即在堆上分配FILE结构,但这不是必需的。例如,如果它被设计为避免堆分配,它也可以发布预先分配的静态结构实例。它只需要支持FOPEN_MAX个并发文件(必须至少为8个)。

答案 1 :(得分:5)

通常它是在堆上分配的,并且它在任何有权访问它的范围内都有效,直到你调用fopen()并且它不是文件描述符,它是

还要小心,

  1. 始终检查NULL是否返回了非fscanf()指针。
  2. 即使在使用"%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 } 的返回值。