c fgetpos给出了错误的立场

时间:2011-05-05 12:14:25

标签: c fopen fgetpos

我是C的新手,我有这段代码:

f = fopen( argv[1], "rb" );
fseek( f, 64, SEEK_SET );
fpos_t pos;
fgetpos (f, &pos);
printf("%x", pos);

但是,这会返回40,即使它应该返回64.我做错了什么?

5 个答案:

答案 0 :(得分:4)

您输出的是十六进制格式的"%x" 64。由于64 = 0x40,这个谜团已经解决了!

答案 1 :(得分:2)

因为您使用的是%x。它说的是40,就像0x40那样,十六进制数。您需要%i或%d才能获得十进制数。

答案 2 :(得分:1)

4 * 16是64

答案 3 :(得分:1)

无论您打印的是十六进制格式。十进制40是64. Do you mean the file size is 0x64 or 0x40

答案 4 :(得分:1)

fpos_t不一定是算术类型,不能与printf一起使用。实现甚至可以将其存储为包含加密位置的结构(如果它喜欢)。使用ftell(或ftello,如果可用)以有意义的数字形式获取文件偏移量。 fgetpos基本没用。