Studiati bene la strncpy:
http://en.cppreference.com/w/c/string/byte/strncpy
If count is reached before the entire array src was copied, the resulting character array is not null-terminated.
Vari esempi sono appena più sotto.
Posso azzardare che in alcuni casi ptr->MTOT abbia al suo interno almeno un carattere NULL, mentre in altri casi no.
Nel primo caso il carattere NULL viene copiato all'interno di miavariabile.arr mentre nel secondo caso, ossia quando viene raggiunta la dimensione massima di caratteri copiabili definita come sizeof(ptr->MTOT), no. In quest'ultimo caso è necessario terminare manualmente miavariabile.arr aggiungendo il NULL finale.
Per evitare casi borderline come questo ti consiglio di effettuare una memset() su miavariabile.arr in questo modo:
dove numero_di_elementi è la lunghezza di miavariabile.arr, subito prima di quelle strncpy(). In questo modo sei sicuro che dopo la copia di ptr->MTOT in miavariabile.arr, quest'ultima sia sempre NULL terminated.codice:memset(miavariabile.arr,0, numero_di_elementi);
Occhio però che se miavariabile.arr, non è un array ma un puntatore allocato, una sizeof() ti darà la dimensione del puntatore, non quanti elementi sono allocati.