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.