strcat serve per accodare al buffer del messaggio di risposta, il buffer del messaggio appena ricevuto.
La sequenza if..printf è questa:

il processo chiama printMessage e NON stampa (if msg->length == 0 risulta true).
accodando il primo buffer al buffer del messaggio di risposta, la condizione if (msg->length > 0) risulta anch'essa true, altrimenti il messaggio di risposta sarebbe stampato in maniera errata!

Forse sono poco chiaro, provo con un esempio:

- A invia a B il seguente messaggio: Q 4 ciao.
- A riceve il messaggio, lo spacchetta nella sua struttura e stampa la struttura: ===> stampa nulla
Crea un messaggio di risposta usando la stessa struttura che prima ha prodotto la stampa nulla:
- IosonoAetirispondo: Q 4 ciao. =======> il messaggio è stato ricevuto e spacchettato correttamente se è stato possibile reinviarlo.