我是C的新手,我有这段代码:
f = fopen( argv[1], "rb" );
fseek( f, 64, SEEK_SET );
fpos_t pos;
fgetpos (f, &pos);
printf("%x", pos);
但是,这会返回40,即使它应该返回64.我做错了什么?
答案 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
基本没用。