C语言 由"fopen()"创建和返回的"FILE"对象是动态变量还是静态变量?



FILE对象是通过fopen()动态或静态变量或其他东西创建和返回的吗?

在以下示例中,

#include  <stdio.h>
FILE *open_data(void) {
FILE *fp;
if ((fp = fopen("datafile", "r")) == NULL)
return (NULL);
return (fp);   
}

open_data()创建和返回的FILE对象是否为自动变量?如果不是,它的存储期限和链接是什么?

当对open_data()的调用返回时,open_data()创建和返回的FILE对象是否会被销毁?

指针返回的FILE对象fopen()要么是从堆中分配的,要么是从静态对象分配的。在这两种情况下,它都可以使用,直到文件被fclose()关闭。从open_data()归还它是完全可以的。

fp是指向FILE对象的指针。fp变量在FILE *open_data(void)功能块中具有自动存储持续时间。

fp指针指向的数据(FILE对象(依赖于fopen()实现。它可能是某些系统实现上具有静态存储持续时间的数据,即。static FILE obj; FILE *fopen() { return &obj; },但它可能是使用fopen()fclose()调用中的动态内存分配函数分配和释放分配存储持续时间的数据。例如,看看 openbsd,有 from fopen(( 调用 __sfp((,它应该从列表中找到空闲的 FILE 对象,或者如果没有找到,它应该分配下一个 FILE 对象。

open_datafopen一样,不返回FILE对象,而是返回指向FILE对象的指针。 此对象由fopen静态或动态分配。

如果它被自动分配(即作为fopen中的局部变量(,那么它的地址将无效。

从 fopen(( 返回的FILE*值是指向系统分配的结构的指针。虽然当函数返回它指向的数据时,指针本身将自动弹出堆栈。

您必须调用fclose()以释放fopen()分配的数据。

最新更新