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_data
和fopen
一样,不返回FILE
对象,而是返回指向FILE
对象的指针。 此对象由fopen
静态或动态分配。
如果它被自动分配(即作为fopen
中的局部变量(,那么它的地址将无效。
从 fopen(( 返回的FILE*
值是指向系统分配的结构的指针。虽然当函数返回它指向的数据时,指针本身将自动弹出堆栈。
您必须调用fclose()
以释放fopen()
分配的数据。