Fai un errore concettuale confondendo le C string con array di char.
La printf() stampa il contenuto di add_mess->dato fino a quando trova un terminatore NULL che può trovarsi oltre il numero di caratteri letti.
In teoria puoi risolvere ponendo dopo il ciclo for
codice:
add_mess->dato[k]=0;
ma se devi trasferire in binario ti crea dei problemi.

Inoltre il ciclo for è sbagliato.
Non dev'essere:
codice:
for (k=0;k<=add_mess->data_length; k=k+n)
ma
codice:
for (k=0;k<add_mess->data_length; k=k+n)
In più mischiare C e C++ è sbagliato.