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.