Almacenar cada archivo de txt en la matriz

Lo que quiero hacer es leer un archivo txt y almacenarlo en una estructura con un miembro char, cada uno de los caracteres de mi archivo.

Aquí está mi código:

typedef struct charClass { char simbolo; int freq; } charClass; 

Esta es la parte importante de la principal:

  input = fopen("testo1.txt", "r"); fseek(input, 0, SEEK_END); //Mi posiziono alla fine del file int dim = ftell(input); //Ottengo il puntatore corrente (n char) fseek(input, 0, SEEK_SET); //Rimetto il puntatore all'inizio del file char tmpChar; charClass *car; car = malloc(dim*sizeof(int)); int i = 0; while (!feof(input)) { tmpChar = getc(input); car[i].simbolo = tmpChar; printf("\n%c", car[i].simbolo); car[i].freq++; i++; } 

Se estrelló.

Intenté buscar en la Web pero no encontré una respuesta.

Intenté usar también fscanf y strcpy, pero no pude hacer que funcionara.

Gracias.

Desde el aspecto de su código, está intentando almacenar el número de veces que aparece un determinado carácter en un archivo. Para eso, le sugiero que codifique una función hash y la almacene en una tabla hash. Eso será más rápido y menos propenso a errores.

 struct hash_blob{ char character; int freq; }; static struct hash_blob hashTable[52]; /*[A-Za-z]*//*Extend this size to include special characters*/ void setZero() { int i = 0; for(i = 0; i < 52; i++) hashTable[i].freq = 0; } int compute_hash(char ch) { if(ch >= 'A' && ch <= 'Z'){ return ch-'A'; } if(ch >= 'a' && ch <= 'z'){ return ch - 'a' + 26; } } void add_hash(char ch) { int loc = compute_hash(ch); hashTable[loc].character = ch; hashTable[loc].number++; } int main(int argc, char *argv[]) { int ch; char filename = "testo1.txt"; FILE *f = (FILE *)fopen(filename,"r"); if(f == NULL)return 1; while((ch = getc(f)) != EOF){ add_hash(ch); } for(ch = 0; ch < 52; ch++) { printf("The number of times %c appears in the file is: %d times\n",hashTable[ch].character, hashTable[ch].number); } return 0; } 

No está asignando suficiente espacio para su estructura charClass. Intenta reemplazar el malloc con esto:

 car = malloc(dim * sizeof(charClass)); 

Además, no estoy seguro de en qué está indexando, usando el índice i. ¿No parece que hayas creado una serie de charClasses …?

Puede hacerlo fácilmente inicializando una matriz de caracteres y utilizando la función fgets ().

 char buffer[50]; while(fgets(buffer,50,fp))//fp is the file pointer { /*Code for checking buffer elements and you can store them in your chosen array*/ }