CARREGAR DADOS DE UM ARQUIVO EM UMA ÁREA ALOCADA DINAMICAMENTE
Supondo que seja necessário trazer de volta para a memória todos os registros dos clientes de uma academia salvos em um arquivo, você deverá seguir os seguintes passos:
- Criar uma função.
- Criar um ponteiro do mesmo tipo dos dados a serem lidos.
- Alocar no ponteiro, uma área de memória do tamanho de um registro.
- Ler um dado do arquivo para a área alocada.
- Realocar a área de forma que caiba mais um registro.
- Repetir a leitura até o final do arquivo.
Observe a seguinte função:
// Subprograma x
// Objetivo : Trazer todos os registros de um
// arquivo para uma area alocada dinamicamente.
// Parametros : Nenhum.
// Retorno : Endereço da alocação.
tipoFrequentador * alocacaoDinamica()
{
// Declarações:
tipoFrequentador *frequen = NULL; // abreviacao de frequentador
int contador=0;
FILE *arq;
// Instruções:
frequen=(tipoFrequentador *)malloc(sizeof(tipoFrequentador)); // alocando memoria
if (!(arq = fopen(ARQFREQUENT,"rb")))
exit(1);
while (fread(frequen + contador,sizeof(tipoFrequentador),1,arq))
{
contador++;
// fazendo a realocacao de memoria
frequen=(tipoFrequentador*)realloc(frequen,(contador+1)*sizeof(tipoFrequentador));
}
return frequen;
}
Note que primeiramente é criado um ponteiro, então mais abaixo ele recebe a função “malloc”, alocando um espaço de um registro (sizeof(tipoFrequentador)), então ele entra em um comando de repetição até o final do arquivo, sempre que é lido um registro o contador aumenta e logo após, o ponteiro recebe um “realloc” para aumentar a capacidade de armazenamento do ponteiro em mais um registro. Por fim, a função retorna o endereço inicial dessa área alocada.