Has publicado todo bien respecto al código usando etiquetas, sin embargo no se ve todo el código. Y por qué es improtante? porque no sabemos las dimensiones de filenameExt
Asi que cuando consultes, siempre postea todo el código porque no basta con lo que tu crees que esta mal o esta fallando ya que por esa misma razón no puedes resolverlo. Nosotros debemos ver siempre todo el panorama.
Agrega en otro post todo el código.
Otra cosa. Tu variable filename tiene 40 bytes de longitud. Usas una variable len que no sabemos cuanto vale. Pasas valores de 0 a 24.
Cuando usas comandos como sprintf y strings la forma de concatenarlos es usando strcpy pero eso para pasar una cadena a otra de igual longitud.
En este caso necesitas, strncpy que copia 1 a la otra a partir del indice.
La función strncpy() copia los caracteres del string2 en el string1. Si el recuento es menor o igual que la longitud de string2, un carácter nulo (\0) no se añade a la serie copiada.
Si el recuento es mayor que la longitud de string2, el resultado de string1 se rellena con caracteres nulos (\0) hasta la longitud recuento.
Entonces usa
strncpy(filanameExt, filename, len);