我新的C和我有這樣的代碼:çfgetpos給錯了位置
f = fopen(argv[1], "rb");
fseek(f, 64, SEEK_SET);
fpos_t pos;
fgetpos (f, &pos);
printf("%x", pos);
然而,這將返回40,即使它應該是返回64什麼是我做錯了什麼?
我新的C和我有這樣的代碼:çfgetpos給錯了位置
f = fopen(argv[1], "rb");
fseek(f, 64, SEEK_SET);
fpos_t pos;
fgetpos (f, &pos);
printf("%x", pos);
然而,這將返回40,即使它應該是返回64什麼是我做錯了什麼?
因爲您使用%x。它的意思是40位,如0x40,即十六進制數字。您需要%i或%d才能得到一個十進制數。
哎呀,感覺愚蠢的哈哈。感謝和其他人。 – 2011-05-05 12:22:54
4 * 16是64
您正在輸出64十六進制格式,"%x"
。由於64 = 0x40,這個祕密就解決了!
無論您打印的是十六進制格式。十進制中的40是64. Do you mean the file size is 0x64 or 0x40
fpos_t
不是(必須)算術類型,不能與printf
一起使用。一個實現甚至可以將其存儲爲一個包含加密的位置的結構(如果它喜歡的話)。使用ftell
(或ftello
,如果可用)以有意義的數字形式獲取文件偏移量。 fgetpos
很大程度上沒用。
一方面,您正在測試的文件中實際上是否有64個字節? – 2011-05-05 12:15:35
你打開的文件長度是多少? – Liv 2011-05-05 12:16:06