C fpos类型是否可以接受空值?
我知道指针可以设置为null(例如,指示所指向的对象不存在),并且没有有效的指针将指向null;是否可以对C fpos类型是否可以接受空值?,c,C,我知道指针可以设置为null(例如,指示所指向的对象不存在),并且没有有效的指针将指向null;是否可以对fpos\u t类型执行相同操作,以使任何有效位置都不为空?fpos\u t通常是无符号整数类型。在大多数系统上,无符号整数,无符号长整数或无符号长整数。Othern的类型与size\u t相同。因此,“有效”偏移量的解释取决于使用它的函数。如果提供了无效的偏移量,则系统调用通常会因EINVAL而失败 无效偏移量通常被称为“偏移量过大”。某些系统调用可能还需要偏移量与例如页面边界对齐 如果您
fpos\u t
类型执行相同操作,以使任何有效位置都不为空?fpos\u t
通常是无符号整数类型。在大多数系统上,无符号整数
,无符号长整数
或无符号长整数
。Othern的类型与size\u t
相同。因此,“有效”偏移量的解释取决于使用它的函数。如果提供了无效的偏移量,则系统调用通常会因EINVAL
而失败
无效偏移量通常被称为“偏移量过大”。某些系统调用可能还需要偏移量与例如页面边界对齐
如果您希望有一个“无效”偏移量,我建议您尝试将其设置为可能的最大值,即(fpos\u t)-1
。但是,没有一个通用的方法。 < P>这是一个C++问题而不是C问题,因为<代码> fPoSt*<代码>不是我所知的C标准的一部分。
<>在C++中,代码> fPOSITT <代码>被定义为“非数组类型,包含指定文件内每个位置的所有信息所需的信息”。见:
我相信它通常是一个结构,虽然理论上它可以是一个指针。但是,它是由实现定义的。因此,它不能(可靠且可移植)为NULL
,并且通常会失败
在C语言中(你每天学习一件新事物),它仍然是不透明的类型。例如,见:
在GNUC库中,fpos_t是一种不透明的数据结构,它包含表示文件偏移量和转换状态信息的内部数据。在其他系统中,它可能具有不同的内部表示形式。fpos对象的内容不打算直接读取,而只是用作调用fsetpos的参数。我们不知道H2CO3所说的,它是一种不透明类型。更详细地说,它是未指定的,这是在章节
7.19.1
中所说的:
fpos\u t
这是一种对象类型,而不是能够记录所有信息的数组类型
需要唯一地指定文件中的每个位置
在第7.19.9.1节中,fgetpos函数表示(强调):
#包括
int fgetpos(文件*限制流,fpos_t*限制pos);
fgetpos函数存储解析状态(如果有)和文件的当前值
在由pos指向的对象中,由stream指向的流的位置指示器。
存储的值包含可由fsetpos函数用于
将流重新定位到调用fgetpos函数时的位置
我们不知道--
fpos\u t
是一种不透明类型。它可能有或可能没有这样的值。如果这是(如我所怀疑的)C++问题而不是C问题,请将标签更改为C++。或者,请指定它引用的C库。下面的答案让我怀疑自己,但我认为POSIX C库使用了fgetpos
etclong
notfpos\u t
-参见下面我的答案。@H2CO3确实,标准中说它包含未指定的信息。我在C99草案中看到了fpos\u t
,首先提到了7.19.1
。你说得很对。我修正了我的答案,但我认为你应该为此得到赞扬。gnu libc手册页指定long
。很明显,我应该去看标准。那是一个标准的东西还是一部分(例如)MSAPI?POSIXftell
etc.返回long
notfpos\u t
。唯一的<代码> fPOStEt <代码>我是C++。@ Abvy<代码> fPOSUT >在我的代码> STDIO。
#include <stdio.h>
int fgetpos(FILE * restrict stream, fpos_t * restrict pos);