/ / valor da matriz muda quando sai do loop - c, loops, for-loop

valor do array muda quando sai do loop - c, loops, for-loop

Obrigado! fread (& byte [i], sizeof (BYTE), 1, inptr) resolve o problema.

Parte do código:

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;

Os valores internos do byte do "for loop" são impressos corretamente, o byte [0] tem o valor 104. Fora do valor do loop para o byte [0] é 0. Por que não é 104? Os valores dos bytes 1, 2 e 3 estão corretos fora do loop.

Respostas:

2 para resposta № 1

Ao ler em sua matriz de bytes, você usa o primeiro valor byte[0] ou *byte como espaço temporário. Existem várias maneiras de corrigir isso:

Variável temporária - Ao invés de usar *byte, crie uma variável temporária:

for (int i = 0; i < block_size; i++) {
BYTE tmp;

fread(&tmp, sizeof(BYTE), 1, inptr);
byte[i] = tmp;
}

Acesso direto - Você realmente não precisa da variável temporária se estiver copiando-a posteriormente, para poder endereçar o byte no qual deseja gravar diretamente:

for (int i = 0; i < block_size; i++) {
fread(&byte[i], sizeof(BYTE), 1, inptr);
}

Blocos de leitura - Na verdade, você nem precisa do loop, porque fread já lê um certo número de blocos:

fread(byte, sizeof(BYTE), block_size, inptr);

Seu código parece um pouco como se tivesse misturado os dois primeiros e o terceiro método.

Finalmente, uma nota: BYTE não é um tipo padrão, então inclua o typedef então sabemos do que você está falando. Fui enganado por sua declaração

BYTE (byte[block_size]);

Os parênteses parecem estranhos, embora pareçam estar com a sintaxe correta. Livre-se deles e essa linha se parece com uma declaração de matriz, que é, é claro:

BYTE byte[block_size];