Alternativa E - fread(&a, sizeof(Aluno), 1, arq);
Análise da Questão
Para resolver esta questão, é necessário compreender o funcionamento da função fread() na linguagem C, que serve para leitura de dados binários de um arquivo.
A assinatura correta da função é:
\text{size\_t fread(void *ptr, size\_t size, size\_t nmemb, FILE *stream);}
Os parâmetros devem ser passados nesta ordem específica:
ptr: Ponteiro para o bloco de memória onde os dados serão armazenados. Como a é uma variável local, precisamos passar seu endereço (&a).size: Tamanho de cada elemento em bytes. Para ler a estrutura inteira, usamos sizeof(Aluno).nmemb: Quantidade de elementos a serem lidos. Como queremos ler apenas um registro completo, o valor é 1.stream: O ponteiro do arquivo aberto. Neste caso, é arq.
Portanto, a chamada correta deve ser:
fread(&a, sizeof(Aluno), 1, arq);
Comparativo das Alternativas
| Alternativa | Avaliação | Motivo |
|---|
| A | Incorreta | A ordem dos argumentos está errada e falta o número de elementos. |
| B | Incorreta | fgets lê texto linha por linha, não serve para estruturas binárias. |
| C | Incorreta | O primeiro argumento deve ser um ponteiro (&a), não o valor da variável. |
| D | Incorreta | fscanf é para entrada formatada (texto) e %struct não é um formato válido. |
| E | Correta | Segue exatamente a sintaxe exigida pela função fread. |
Alternativa E.