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ì!