Se per null- terminated intendi il \0 alla fine della stringa si.
Per quanto riguarda le malloc, ci avevo pensato ed nfati ho provato a fre una cosa del genere:

.
.
.
...

char *msg;
...
int main(...){
...
while(.......){
msg = malloc(161*sizeof(char));

/* Gestione della richiesta */
/*Fine Gestione richiesta*/

free(msg);
/*fine ciclo - ritorno al while*/
}

solo che mi si blocca quando lo faccio partire con le malloc !! Dove sbagliO??? Forse nel dichiarare msg fuori dal main? (cosi mi è venuto un dubbio ora)
Tra poco sarò all'uni e magari se non risolviamo posto qualche riga di codice