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.