我已经开始学习一些 C 作为一种爱好,并且已经盲目地使用 FILE 作为文件指针的声明相当长一段时间了,我一直在想。这是 C 用来处理文件的关键字或特殊数据类型吗?它是否包含文件内的流和其他数据?为什么定义为指针呢?
举一个例子来说明我的意思,让它更清楚一点:
FILE* fp; //<-- this
fp = fopen("datum.txt", "r");
while(!feof(fp)) {
// etc.
}
这是 C 用来处理文件的关键字或特殊数据类型吗?
您所指的是标准 io 库使用的 typedef 结构,用于保存 fopen 及其函数系列使用的适当数据。
为什么定义为指针呢?
使用指向结构的指针,您可以将其作为参数传递给函数。例如,这是 fgets 或 fgetc 将接受的内容,形式为function(FILE* fp)
fopen 函数将返回一个指向新创建的 FILE 结构的指针,将这个新指针分配给未使用的指针将导致它们指向同一对象。
它是否包含文件内的流和其他数据?
结构定义似乎比它的描述更虚幻一些。这直接取自我的 stdio.h,来自 MinGW32 5.1.4
typedef struct _iobuf
{
char* _ptr;
int _cnt;
char* _base;
int _flag;
int _file;
int _charbuf;
int _bufsiz;
char* _tmpfname;
} FILE;
其中包括之前可爱的评论:
有些人认为,任何心智正常的人都不应使用
这个结构的内部。
这个结构的内容在其他实现上似乎有很大的变化,glibc 源代码通常有某种形式的注释,但它们的结构被隐藏在大量代码下。
留意上述警告是有意义的,而不必担心它会做什么。 :)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)