[C] Problema con funzione fgets
Ciao a tutti,
sto cercando di scrivere un programma in C che mi legga una matrice di caratteri presente in un file e la memorizza in una matrice di caratteri normale.
Il main è il seguente:
mentre la funzione che utilizzo è cosi implementata:
dove MAX_C e MAX_R sono delle costanti definiti tramite #define.
Il programma smette di funzionare quando cerca di processare l'istruzione
all'interno della funzione "leggi_matrice".
Qualcuno sa dirmi cosa sbaglio?
Grazie.
sto cercando di scrivere un programma in C che mi legga una matrice di caratteri presente in un file e la memorizza in una matrice di caratteri normale.
Il main è il seguente:
int main(int argc, char *argv[])
{
FILE *ptrvip;
int n_righe = 0, n_colonne = 0;
if(argc!=2 && (ptrvip=fopen(argv[1], "r"))==NULL)
{
printf("Impossibile aprire il file %s\n", argv[1]);
exit(EXIT_FAILURE);
}
else
{
printf("File %s letto correttamente!\n\n", argv[1]);
//metto la & prima delle variabili per indicare che sto effetuando un passaggio di parametri per riferimento (ovvero per indirizzo)
//e non per valore
char** matricevip = leggi_matrice(ptrvip, &n_righe, &n_colonne);
}
fclose(ptrvip);
return 0;
}mentre la funzione che utilizzo è cosi implementata:
char** leggi_matrice(FILE *nomefile, int *r, int *c)
{
printf("\nTest1\n");
//**matricevip è un doppio puntatore(un puntatore per le righe e uno per le colonne)
char buffer[MAX_C], *res, **matricevip, temp;
int i = 0, j = 0;
//Acquisizione numero di colonne
res = fgets(buffer, MAX_C, nomefile);
printf("\nTest2\n");
while(res[i] != '\0')
{
*c = *c +1;
i++;
}
printf("\nNumero colonne: %d\n", *c);
//Riposiziono il cursore all'inizio del file
fseek(nomefile, 0, 0);
//Conto il numero della righe
while(1)
{
res = fgets(buffer, MAX_R, nomefile);
if(res == NULL)
break;
*r = *r + 1;
}
printf("\nNumero righe: %d\n", *r);
//Allocazione dinamica della memoria
matricevip = (char**) malloc (*c * sizeof(char*));//alloco lo spazio per le colonne
for(i = 0; i < *c; i++)
matricevip[i] = (char*) malloc (*r * sizeof(char));//alloco lo spazio per le righe
//Riposiziono il cursore all'inizio del file
fseek(nomefile, 0, 0);
//Caricamento della matrice da file
while(!feof(nomefile))
{
for(i = 0; i < *r; i++)
for(j = 0; j < *c; j++)
{
fscanf(nomefile, "%c", &temp);
if(temp != '\0')
matricevip[i][j] = temp;
}
}
//Stampa della matrice
for(i = 0; i < *r; i++)
{
for(j = 0; j < *c; j++)
printf("%c", matricevip[i][j]);
//printf("\n");
}
}dove MAX_C e MAX_R sono delle costanti definiti tramite #define.
Il programma smette di funzionare quando cerca di processare l'istruzione
res = fgets(buffer, MAX_C, nomefile);
all'interno della funzione "leggi_matrice".
Qualcuno sa dirmi cosa sbaglio?
Grazie.
Risposte
"irelimax":
[...]
char** leggi_matrice(FILE *nomefile, int *r, int *c) { printf("\nTest1\n"); //**matricevip è un doppio puntatore(un puntatore per le righe e uno per le colonne) char buffer[MAX_C], *res, **matricevip, temp; int i = 0, j = 0; //Acquisizione numero di colonne res = fgets(buffer, MAX_C, nomefile); [...] }
Il programma si blocca quando cerca di processare l'istruzione
res = fgets(buffer, MAX_C, nomefile);
all'interno della funzione "leggi_matrice".
Qualcuno sa dirmi cosa sbaglio?
Grazie.
Ciao irelimax
Secondo me il problema è dovuto a come passi nomefile alla funzione fgets. Tale funzione come terzo parametro vuole una variabile di tipo FILE, te invece gli stai passando qualcosa di tipo FILE*. Prova a scrivere dunque nomefile.
Fammi sapere se funziona.
Scusami non ho capito cosa vuoi dire. La funzione get è definita cosi:
quindi alla funzione fgets non gli devo passare come terzo parametro una variabile di tipo FILE * ?
char *fgets(char *s, int size, FILE *nomefile);
quindi alla funzione fgets non gli devo passare come terzo parametro una variabile di tipo FILE * ?
Scusa, ho letto di fretta, in effetti la definizione è come dici te. In particolare che errore ti dà il programma
Grazie cmq ma ho risolto modificando il codice.