Originariamente inviato da Who am I
Alcune considerazioni:

1)Indenta sempre il codice;
2)Non eseguire 4 volte la strlen nel for, invece fai così:

codice:
const unsigned int length=strlen(nome1);
for(i=n;i<=length;i++,j++)
   temp[j]=nome1[i];
Onde evitare di calcolare più volte del dovuto la lunghezza della stringa, aumentando così la complessità temporale del programma;

3)Prevedi anche il caso in cui l' input non sia corretto, ad esempio l' utente potrebbe digitare "pippo.tx" invece di "pippo.txt", in tal caso puoi stampare un messaggio di errore:

codice:
int find(char* str, char x)
// cerca il carattere x nella stringa, ritorna l' indice, oppure -1 se 
// tale carattere non è presente
{
    int result=-1;
    const int length=(int)strlen(str);
    for(int i=0; i<length && result==-1; i++)
    {
        if(str[i]==x)
            result=i;
    }
    return result;
}
Nel main puoi eseguire il controllo:

codice:
int index=find(nome1,'.');
if(index==-1 || index!= (strlen(nome1)-4) )
{
    fprintf(stderr,"input non corretto");
    exit(EXIT_FAILURE);
}
Nel tuo caso penso che il problema sia un input scorretto, se provi ad eseguire il codice digitando "pippo.txt" ti stampa come risultato "pippo.(meta).txt", non vedo problemi.
grazie per gli accorgimenti provvederò a sistemarlo però guarda che io inserisco correttamente prova.txt ad esempio e ricevo in output prova**(meta).txt con due caratteri indesiderati strano che a te il mio stesso codice non dia problemi