C'era un errorino logico sull'ultimo strncpy...
Precisamente qua:
codice:
strncpy(&dst[ i], src, len);
correggilo in:
codice:
strncpy(dst+i, src, strlen(src));
Praticamente cercavi di copiare più caratteri di quelli che realmente la stringa doveva contenere poiché usavi la variabile len (che indica la dimensione massima di stringa) e non la dimensione della stringa sorgente...
Inoltre ti consiglio per abbreviare, di usare la sintassi array + N per copiare dei caratteri su una posizione specifica di un puntatore 
Un array ricorda che è comunque un puntatore...
EDIT: mi sono comunque accorto che a sto punto puoi usare direttamente la funzione strcpy al posto della strncpy