O objetivo do código é ler as linhas de um arquivo e armazená-las numa variável temporária (temp[]) e depois passar para a variável definitiva da struct (*line) através da função strcpy(); isso é feito na função load_info().
No main() eu abro o arquivo e chamo a função que realiza o que descrevi acima e, como pode ser visto no código, eu estou alocando os espaços para armazenamento através de malloc().
O problema é: ele só lê a primeira linha e dá erro (“a.exe parou de funcionar” é o que aparece).
Realmente não sei no quê o erro se encontra, se na utilização do malloc ou o que quer que seja, e por conta disso ficou bem difícil para eu pesquisar e encontrar uma solução… Gostaria de uma explicação sobre o que está acontecendo e como posso corrigir.
Conteúdo do arquivo:
alfabeto_entrada={a,b}
alfabeto_saida={a,c}
estados={q0,q1,q2}
inicial=q0
finais=q2
(q0,a)=(q1,@)
(q1,a)=(q1,a)
(q1,b)=(q2,c)
(q2,a)=(q1,@)
Nota: as linhas podem ser substituídas por qualquer outra coisa (“aaaaa”, “bbbbbb”), as dadas são apenas o conteúdo do trabalho que estou fazendo.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX 50
typedef struct{
char *line;
}INFO;
void load_info(INFO *vet[], FILE *arq){
int k;
char temp[100];
for(k = 0; !feof(arq); k++){
vet[k] = (INFO*)malloc(sizeof(INFO)+1);
fscanf(arq, "%[^\n]%*c", temp); //lê e guarda a linha do arquivo em 'temp'.
vet[k]->line = (char*)malloc(sizeof(strlen(temp))+1);
strcpy(vet[k]->line, temp);
printf("test; vet[%d]->line: %s\n", k, vet[k]->line);
}
}
int main(){
INFO *v[MAX];
FILE *arq;
arq = fopen("arq.txt", "r");
if(arq == NULL){
printf("error\n");
}else printf("the file was opened\n");
load_info(v, arq);
return 0;
}