Ne ho accennato diverse volte, ad esempio (e c'è la prova di stampa!):
forum.ubuntu-it.org/viewtopic.php?f=33&t=572659&view=unread#p4518705
Il fatto è che 'ù' non è un carattere previsto nel set ASCII originale a 7 bit, quindi il compilatore lo deve convertire (codificare) in un qualche formato (encoding), che però non è detto sia lo stesso che verrebbe usato da altri compilatori su architetture o sistemi operativi diversi.
Questo vuol dire che se non si affronta esplicitamente il problema dell'encoding si possono scrivere cose illeggibili su altri sistemi.
Per mettere d'accordo tutti si è inventato l'unicode (i primi 128 valori corrispondono esattamente all'ASCII originale). In unicode il carattere 'ù' ha un valore ben preciso e universale. Da questo punto di vista le stringhe di caratteri dovrebbero essere sempre di tipo unicode (non so se il C le supporta in qualche modo), e strlen riporterebbe sempre l'esatto numero di caratteri.
Solo al momento di trasmettere o salvare su disco questi "caratteri astratti" (rappresentati nella macchina con l'unicode universale) le stringhe andrebbero encodate, ottenendo così delle stringhe codificate (in ASCII, utf-8, iso-8859-1, windows-1252 ecc ecc), cioè in sostanza gli array di caratteri/byte che hai usato fino ad adesso.
La codifica implicita in Ubuntu vedo che è la utf-8, questo vuol dire che un file di testo prodotto da un tuo programma C su Linux potrebbe apparire errato se letto da un programma windows che non tiene conto dell'encoding con cui è stato scritto (e viceversa). In sostanza affinché un testo contenente caratteri diversi da quelli ASCII 7 bit sia leggibile è sempre necessario conoscere l'encoding usato per generarlo (ad esempio ho dei vecchi testi scritti con l'MS-DOS che sono riuscito a rileggere correttamente solo quando ho scoperto che in lettura dovevo effettuare un decode con cp-437).
Sintesi del papiello: ricorda che in C su Linux stai trattando stringhe di caratteri codificati in utf-8, e strlen non riporta il numero di "caratteri astratti", ma il numero di bytes che servono a codificarli con quell'encoding.