Ragazzi ho da poco finito di completare questo programma che non fa altro che creare una lista concatenata semplice di stringe e stamparla. Il programma termina quando mettete il carattere 0, il mio problema sta nel fatto che se metto parole inferiori a 4 lettere funziona perfettamente ma se metto ad esempio "nonno" la o me la stampa male come se non la riconoscesse. Ringrazio in anticipo ogni aiuto.

codice:
# include <stdio.h>
# include <stdlib.h>
# include <string.h>

typedef struct L1
{
    char dato;
    struct L1 *next;
} L;

L *crealista();
void visualizzalista(L *p);

int main()
{
    L *l;
    l=crealista();
    visualizzalista(l);

}

L *crealista()
{
    L *p,*punt;
    int m=2;
    printf("Inserisci la 1 stringa: ");
    p=(L*)malloc(sizeof(L)*10);
    scanf("%s",&p->dato);
    punt=p;
    while(punt->dato!='0')
    {
        punt->next=(L*)malloc(sizeof(L));
        punt=punt->next;
        printf("Inserisci la %d stringa: ",m);
        scanf("%s",&punt->dato);
        m++;
    }
    punt->next=NULL;
    return (p);
}

void visualizzalista(L *p)
{
    printf("lista");
    while(p!=NULL)
    {
	 printf("-->");
	 printf("%s",&p->dato);
         p=p->next;
    }
printf("\n");
}