Con la scanf come viene usata qui sopra, si rischia, con nomi di file lunghi, di uscire fuori dallo spazio di memoria allocato...
Quando ancora mi serviva programmare in C usavo una cosa del genere:
codice:
alfa = leggi_parola(carattere, '\n');
// Occorre una variabile globale impostata a priori detta MEM > 0
e poi la funzione era così:
codice:
/*
Funzione leggi_parola():
la funzione permette di creare un array contenente un non
definito a priori numero di caratteri di input
*/
char *leggi_parola(char primo, char tappo)
{
int i=0; // Contatore sull'array per inserire i dati
char *stringa; // Array di char da restituire
char carattere; // Carattere di input
int memoria=0; // Grandezza dello spazio di memoria iniziale
// Alloco una quantità iniziale di memoria per la stringa
stringa = (char *)malloc(MEM);
// Il primo carattere sarà quello passato come variabile della funzione
carattere = primo;
// Continuo a leggere gli input fino a che non incontro il carattere
// speciale contenuto in tappo
do
{
// Se la memoria è piena la espando
if(i%MEM==0)
{
memoria = i+MEM;
stringa = realloc(stringa, memoria);
}
// Scrivo il carattere nel mio array
stringa[i]=carattere;
i++;
} while((carattere=getchar())!=tappo);
// Chiudo la stringa con il carattere terminatore '\0'
if(i%MEM==0)
stringa = realloc(stringa, i+1);
stringa[i]='\0';
return stringa;
}
un po' lunga, ma di certo non si sbaglia così!