quinta-feira, 21 de março de 2019

Lendo arquivo e armazenando em struct

Neste exemplo o programa ler os dados de um arquivo
e armazena numa variável membro de uma struct.
Note que tanto a struct como sua variável foram
alocadas dinâmicamente.
No teste usei um arquivo de mais de 18000 linhas,
mas isto pod ser expandido grandemente até a memória
máxima do sistema, o que não é recomendado.

Veja abaixo uma imagem do programa em execução:


Veja abaixo o código do programa:


//Lendo um arquivo e copiando num membro de uma struct
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#define SIZE 18195
typedef struct harpa {
     char **nome;
} harpa_crista;
int main ( ) {
     FILE*arq;
     int i = 0, c = 0;
     harpa_crista *pt;
     //abaixo alocando memória para a struct
     pt = ( harpa_crista* ) malloc ( SIZE *sizeof ( harpa_crista ) );
     arq = fopen ( "Harpa cristã.txt","r" );
     if ( arq == NULL ) {
         textcolor ( YELLOW );
         gotoxy ( 26,12 );
         printf("Problemas na abertura do arquivo ");
         getche ( );
         return ( 0 );
     }
     //abaixo alocando memória para a variável da struct
     pt -> nome = ( char** ) malloc ( SIZE *sizeof ( char* ) );
     while ( feof ( arq ) == 0 ){
         pt -> nome [ c ] = ( char* ) malloc ( SIZE *sizeof ( char ) );
         fgets ( pt -> nome [ c ], 80, arq );
         ++c;
     }
     printf("\n\n");
     c = 1;
     for ( i = 0; i < SIZE; i++ ) {
         printf("%d", c++ );
         printf(" %s ", pt -> nome [ i ] );
     }
     getche ( );
     free ( pt );
     free ( pt -> nome  );
     return ( 0 );
}