- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
根据 C99,ftell
的原型(prototype)是:
long int ftell(FILE *stream);
根据我的理解,它应该是以下内容:
fpos_t ftell(FILE *stream);
这是为什么?
来自§7.19.1-2
fpos_t
which is an object type other than an array type capable of recording all the information needed to specify uniquely every position within a file.
我知道 fpos_t
应该用来记录文件中的位置。所以 ftell
返回文件中的位置应该是那种类型。相反,它是:
签名
long
类型,它可能太小或太大而无法在某些体系结构上访问文件。 最佳答案
注意 fpos_t
是
[...] a complete object type other than an array type capable of recording all the information needed to specify uniquely every position within a file.
所以它甚至可以是一个结构,除了调用 fsetpos
之外完全不能用于任何其他用途!
另一方面,ftell
的返回值是一个标量,保证可用于告知二进制文件中的确切字节位置:
For a binary stream, the value is the number of characters from the beginning of the file.
除此之外,原因是向后兼容性。 ftell
在 C89 中首次亮相,也许当时的期望是 long
可以足够快地扩展以包含所有文件大小,但如今情况并非总是如此。不幸的是,不可能更改 ftell
返回的类型,但现在更改它为时已晚 - 即使那些支持更大文件的平台现在也有另一个名称的函数,例如 ftello
.
需要签名,因为该函数在错误时返回 -1
。
关于c - 为什么 ftell 的返回类型不是 fpos_t?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57200729/
在 Linux(ubuntu) 中,fpos_t 在一个结构中 typedef fpos_t { size_t _pos, size_t _state } 在 Windows 中,fp
我知道指针可以设置为空(例如表示指向的对象不存在),没有有效的指针会指向空;是否可以对 fpos_t 类型做同样的事情,这样就没有有效位置为空? 最佳答案 H2CO3说的我们不知道,它是不透明的。以前
这里我只想查看变量pos的内容;那么必须为此使用什么类型的格式说明符? #include void main() { FILE *fileptr = fopen("sample.txt",
根据 C99,ftell 的原型(prototype)是: long int ftell(FILE *stream); 根据我的理解,它应该是以下内容: fpos_t ftell(FILE *stre
所以我找不到这个问题的答案。 是否有: 一个类似于 fgetc 的函数,它在不增加指针的情况下检索指针处的字符? 或者减少 fpos_t 对象而不减少其下方指针的方法。(对此答案最感兴趣) 对于 C。
我正在使用一个对文件长度使用位运算的函数:fpos_t flen; 当我尝试将其转换为 int 或 char,或尝试对其进行算术运算时,它失败并出现以下编译错误:错误:在需要整数的地方使用了聚合值 最
我了解 ftell() 和 fseek() 在 C 中的工作原理,但是对于这个问题,我在任何地方都找不到任何准确的答案,包括 StackOverflow 上最近的帖子(LINK)。 那么请您回答以下问
我是一名优秀的程序员,十分优秀!