ciao coder si hai ragione! infatti quello che avevo scritto era solo un'inizio, ma rileggendo i tuoi messaggi, mi sono accorto di aver letto male...

cioe' te dici di creare un buffer dove ci faccio prendere una riga di caratteri e poi inserisco il tutto dentro il nodo della lista e poi svuoto il buffer e ricomincio con il prossimo nodo... giusto??

ma come faccio a creare un nodo alla volta??

io invece pensavo di fare in uno di questi due modi:

1) determino una grandezza fissa per ogni nodo e arrivederci... ad esempio 5 caratteri
facendo sempre scrivere all'utente cio' che vuole ma inserisco nel nodo solo i caratteri permessi;

2) chiedo all'utente di quanti elementi deve essere composto la lista e quanti elementi puo' contenere ogni nodo e poi faccio scrivere un carattere alla volta e quando incontra un carattere speciale mi punta al nodo successivo...

allora ricapitoliamo: questa e' la mia struttura

codice:
/* definizione del tipo di dato "booleano" */
typedef enum {  falso,
                vero } bool_t;

/* definizione di un elemento della lista */
typedef struct elem_lista
{
    char *simbolo;                       /* simbolo dell'argomento            */
    struct elem_lista *succ_p;          /* puntatore all'elemento successivo */
    struct elem_lista *prec_p;         /* puntatore all'elemento precedente */
} elem_lista_t;

questa e' la mia funzione di inserimento:

codice:
/* definizione della funzione di inserimento di un elemento della lista */
void inserisci_simbolo  (char simbolo,                      /* input: simbolo dell'argomento                  */
                         elem_lista_t **testa_p)            /* lavoro: punt. all'ind. della testa della lista */
{
    /* dichiarazione delle variabili locali alla funzione */
    elem_lista_t            *nuovo_p, /* lavoro: puntatore al nuovo elemento da inserire in lista */
                            *corr_p;  /* lavoro: puntatore di supporto all'inserimento            */
    
    /* viene allocato spazio in memoria per il nuovo elemento */
    nuovo_p = (elem_lista_t *)malloc(sizeof(elem_lista_t));
    
    /* viene assegnato il simbolo argomento al nuovo elemento */
    nuovo_p->simbolo = simbolo;
    
    /* se la lista è vuota il nuovo elemento viene inserito in testa alla lista */
    if (*testa_p == NULL)
    {
        nuovo_p->succ_p = NULL;
        nuovo_p->prec_p = NULL;
        *testa_p = nuovo_p;
    }
    
    
    /* altrimenti il nuovo elemento viene inserito in fondo alla lista */
    else
    {
        for (corr_p = *testa_p;
             (corr_p->succ_p != NULL);
             corr_p = corr_p->succ_p);
        
        corr_p->succ_p = nuovo_p;
        nuovo_p->succ_p = NULL;
        nuovo_p->prec_p = corr_p;
    }
}
ora dovrei fare una funzione per acquisire le stringhe di ogni nodo della lista... una Acquisisci_lista
e qui veramente non so come fare
so soltanto quali controlli dovrei mettere che se vuoi te li scrivo

e poi una funzione che mi stampa tutta la lista