fpos_t类型变量的格式说明符是什么?

3

这里我只想查看变量pos的内容;那么需要使用什么类型的格式说明符?

#include <stdio.h>

void main() {
    FILE *fileptr = fopen("sample.txt", "r+");
    fpos_t pos;
    int val = fgetpos(fileptr, &pos);
}

fpos_t 是标量还是聚合体? - Sourav Ghosh
也许你想使用 ftell 代替? - user694733
要打印任何对象,您可能会发现这个很有用。 - chux - Reinstate Monica
2个回答

5

fpos_t在C标准中定义为:

fpos_t

是一种完整的对象类型(而不是数组类型),能够记录指定文件中每个位置所需的所有信息,从而唯一地确定每个位置。

此类型不一定是标量类型,它可以被定义为具有多个成员的struct。没有printf格式以可读的方式输出它。有些系统可能需要执行复杂的任务来处理文本文件,并非每台计算机都是PC

如果您对其实现感兴趣,可以将其内容转储为十六进制字节:

#include <stdio.h>

int main(void) {
    FILE *fileptr = fopen("sample.txt", "r+");
    fpos_t pos;

    if (fileptr && fgetpos(fileptr, &pos) == 0) {
        printf("contents of pos: ");
        for (size_t i = 0; i < sizeof(pos); i++) {
            printf("%02X", ((unsigned char *)&pos)[i]);
        }
        printf("\n");
    }
    return 0;
}

在许多现代系统上,您将获得0000000000000000,因为64位整数足以表示文件中所需的所有信息,但是您不应该依赖于此。

4

fpos_t是一个故意设置为不透明的结构体。

此外,C标准没有定义一种检查其内容的方法(就像Java等其他语言中看到的toString()的无意义操作一样)。

因此,如果您想要一个可移植的解决方案,那么您可能会感到失望。

如果这是针对特定平台进行调试,则您可能能够找出其内容(通常它包含指定字节数的整数类型),并相应地输出。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接