Dziękuję Ci! fread (& byte [i], sizeof (BYTE), 1, inptr) rozwiązuje problem.
Część kodu:
BYTE (byte[block_size]);
for (int i = 0; i < block_size; i++)
{
fread(&byte, sizeof(BYTE), 1, inptr);
byte[i] = *byte;
printf("b[%i] = %it", i, byte[i]);
}
printf("b0 = %i, b1 = %i, b2 = %i, b3 = %in", byte[0], byte[1], byte[2], byte[3]);
return 0;
Wewnątrz bajtu „dla pętli” wartości są drukowane poprawnie. Bajt [0] ma wartość 104. Poza wartością pętli dla bajtu [0] jest 0. Dlaczego to nie 104? Wartości bajtów 1, 2 i 3 są prawidłowe poza pętlą.
Odpowiedzi:
2 dla odpowiedzi № 1Kiedy czytasz w tablicy bajtów, używasz pierwszej wartości byte[0]
lub *byte
jako miejsce na zarysowania. Istnieje kilka sposobów rozwiązania tego problemu:
Zmienna tymczasowa - Zamiast używać *byte
, utwórz zmienną tymczasową:
for (int i = 0; i < block_size; i++) {
BYTE tmp;
fread(&tmp, sizeof(BYTE), 1, inptr);
byte[i] = tmp;
}
Dostęp bezpośredni - Naprawdę nie potrzebujesz zmiennej tymczasowej, jeśli kopiujesz ją później, abyś mógł zaadresować bajt, do którego chcesz napisać bezpośrednio:
for (int i = 0; i < block_size; i++) {
fread(&byte[i], sizeof(BYTE), 1, inptr);
}
Czytaj bloki - W rzeczywistości nie potrzebujesz nawet pętli, ponieważ fread
już czyta pewną liczbę bloków:
fread(byte, sizeof(BYTE), block_size, inptr);
Twój kod wygląda trochę tak, jakby pomieszał dwie pierwsze i trzecią metodę.
Na koniec uwaga: BYTE
nie jest typem standardowym, więc proszę dołączyć typedef
więc wiemy o czym mówisz. Twoja deklaracja zrzuciła mnie z tropu
BYTE (byte[block_size]);
Nawiasy wyglądają dziwnie, choć wydają się mieć poprawną składnię. Pozbądź się ich, a ta linia wygląda jak deklaracja tablicowa, którą oczywiście jest:
BYTE byte[block_size];