Il problema è che hai dichiarato la funzione con 2 argomenti

codice:
void concatena (char *, char *);   /*Prototipo*/
ma poi l'hai implementata e richiamata con 4.

codice:
void concatena (char *a1, char *b1, int *i1, int *j1)
{
     if(i+j > ) bla bla bla
     
     
     return;
}
Il prototipo non coincide con l'implementazione e ciò che fa testo è sempre il prototipo.


Ciao.