strlen lavora sulle stringhe
un array di char però non è per forza una stringa
un array di char diventa una stringa se e solo se è presente un terminatore di stringa in una qualsiasi delle sue posizioni ('\0')


se chiami una strlen su un array di char non inizializzato e senza che tu abbiap osto in un punto preciso il terminatore di stringa, il risultato che ottieni è totalmente imprevedibile e dipende da quanto vi fosse precedentemente scritto in quella determinata locazione di memoria


per la cronaca, la malloc si limita semplicemente a renderti disponibile una determinata porzione di memoria, ma non te la inizializza a nessun valore, bensi vi lascia al suo interno quanto precedentemente vi fosse