Tanto per cominciare

Originariamente inviato da h3unter
Inoltre la funzione pop vede sempre la pila vuota. Credo sia una banalità ma davvero sono bloccato
bada bene a cosa hai scritto:

codice:
case 2:  // Pop di una stringa
// Se la pila non è vuota //
if (!isEmpty)
{
    stringa = pop (&pila);
    printf ("\nLa stringa e':\n%s", stringa);
}
effettivamente quella condizione è sempre falsa.

In quanto al primo problema, è un effetto subdolo dovuto al fatto che per la lettura da tastiera della stringa utilizzi sempre lo stesso array allocato staticamente in memoria nel main, "parola": poiché ogni volta che inserisci una stringa vai a scrivere nell'array parola che in memoria si trova sempre allo stesso indirizzo, di fatto ad ogni iterazione vai a sovrascrivere la parola precedente; ora, poiché quando crei un nuovo nodo non fai una strcpy() ma una banale copia di puntatori, di fatto ti ritrovi con tutti i nodi che hanno, nel campo stringa, l'indirizzo dell'array "parola" allocato in main, pertanto la stringa da loro puntata si aggiorna dinamicamente all'ultima parola letta da tastiera.
Correggi allocando della memoria per il puntatore "stringa" di ogni nodo ed eseguendo una strcpy().