int check[sizeof(char)*4]; //creates a buffer array 4 bytes long
這是不正確的。您正在創建一個由四個整數組成的數組,每個整數通常爲32位,然後當您printf(「%d」,檢查)時,您正在打印該數組的地址,每次運行程序時該地址可能會發生變化。我想你想要的是:
if (fp = fopen("filesysFile-full", "r")) {
fseek(fp, 1044, SEEK_SET); //Goes to 1024th byte
int check; //creates a buffer array the size of one integer
fread(&check, 1, sizeof(int), fp); //reads an integer (presumably 1) from the file
printf("%d",check); //prints
int close = fclose(fp);
if (close == 0) {
printf("Closed");
}
}
請注意,不是聲明一個整數數組,而是聲明一個整數。還要注意從fread(check,...)到fread的更改(&檢查,...)。 fread的第一個參數是要讀取數據的緩衝區地址(在本例中爲單個整數)。
請記住,雖然整數可能是32位長,但不能保證。此外,在大多數操作系統中,整數存儲與第一盤上至少顯著字節,因此,如果磁盤上的數據看起來像這樣在字節1044,你將只讀取1:
0x01 0x00 0x00 0x00
如果是其他方式,0x00 00 00 01,將讀作16777216(0x01000000)。
如果你想讀超過一個整數,你可以按如下方式使用數組:
if (fp = fopen("filesysFile-full", "r")) {
fseek(fp, 1044, SEEK_SET); //Goes to 1024th byte
int check[10]; //creates a buffer of ten integers
fread(check, 10, sizeof(int), fp); //reads 10 integers into the array
for (int i = 0; i < 10; i++)
printf("%d ", check[i]); //prints
int close = fclose(fp);
if (close == 0) {
printf("Closed");
}
}
在這種情況下,檢查(不帶括號)是一個指向數組的指針,這就是爲什麼我已經將fread改回fread(檢查,...)。
希望這會有所幫助!
對於二進制文件,你不需要''rb「'而不是''r」'嗎? – Mehrdad 2011-05-31 01:11:57
在Windows上,是的。在Linux或Unix上,不管,但無論如何可移植性可能是一個好主意(以防代碼稍後在Windows上使用)。 – MRAB 2011-05-31 01:51:48