c fgetpos дает неправильную позицию - PullRequest
0 голосов
/ 05 мая 2011

Я новичок в C, и у меня есть этот код:

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

Однако это возвращает 40, даже если предполагается, что оно возвращает 64. Что я делаю не так?

Ответы [ 5 ]

4 голосов
/ 05 мая 2011

Вы выводите 64 в шестнадцатеричном формате, "%x".Поскольку 64 = 0x40, загадка раскрыта!

2 голосов
/ 05 мая 2011

Потому что вы используете% x. Это говорит 40 как в 0x40, шестнадцатеричное число. Вам нужно% i или% d, чтобы получить десятичное число.

1 голос
/ 05 мая 2011

fpos_t не является (обязательно) арифметическим типом и не может использоваться с printf.Реализация может даже сохранить его как структуру, содержащую зашифрованную позицию, если она того пожелает.Используйте ftell (или ftello, если доступно), чтобы получить смещение файла в значимой числовой форме.fgetpos в значительной степени бесполезен.

1 голос
/ 05 мая 2011

все, что вы печатаете, находится в шестнадцатеричном формате. 40 в десятичном виде - 64. Do you mean the file size is 0x64 or 0x40

1 голос
/ 05 мая 2011

4 * 16 - 64

...