se definisci
char *a = "ciao";
'a' è un puntatore ad un letterale stringa costante che non deve essere modificato; se vuoi una normale stringa che puo esere modificata devi dichiarare:
char a[] = "ciao";
In pratica hai una stringa costante solo se inizializzi il puntatore direttaemnte con "ciao"; se fai:
char *a = malloc(bla bla bla);
puoi modificare il contenuro di a.
Inoltre ricorda che se la stringa ha una lunghezza massima pari a 10, e hai un campo char * che deve contenere tale stringa, devi allocare meroria per 11 caratteri, cioè per 10 + 1 che è il carattere di fine stringa.