2011-05-05 36 views
0

我新的C和我有這樣的代碼:çfgetpos給錯了位置

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

然而,這將返回40,即使它應該是返回64什麼是我做錯了什麼?

+1

一方面,您正在測試的文件中實際上是否有64個字節? – 2011-05-05 12:15:35

+0

你打開的文件長度是多少? – Liv 2011-05-05 12:16:06

回答

2

因爲您使用%x。它的意思是40位,如0x40,即十六進制數字。您需要%i或%d才能得到一個十進制數。

+0

哎呀,感覺愚蠢的哈哈。感謝和其他人。 – 2011-05-05 12:22:54

1

4 * 16是64

4

您正在輸出64十六進制格式,"%x"。由於64 = 0x40,這個祕密就解決了!

1

無論您打印的是十六進制格式。十進制中的40是64. Do you mean the file size is 0x64 or 0x40

1

fpos_t不是(必須)算術類型,不能與printf一起使用。一個實現甚至可以將其存儲爲一個包含加密的位置的結構(如果它喜歡的話)。使用ftell(或ftello,如果可用)以有意義的數字形式獲取文件偏移量。 fgetpos很大程度上沒用。

相關問題