Salve
Intanto usa i tag code perché altrimenti il codice sembra incomprensibile.
Per risolvere l'esercizio basta capire che "char s[]" è praticamente uguale a "char *s".
Questa è la funzione:
char *f (char* s, char* t, char *out)
{
int distanza = 0;
while(*s == *t)
{
s++;
t++;
}
while(*s != '\0')
{
*out = *s;
out++;
s++;
distanza++;
}
*out = '\0';
out -= distanza;
return out;
}
Nel primo while fa il confronto dei caratteri delle stringhe ed esce quando trova i caratteri diversi (quando utilizzo "s++" e "t++" incremento l'indirizzo puntato dai puntatori di uno poichè un carattere della stringa occupa un byte) mentre nel secondo copio i caratteri a partire da quello puntato da s (cioè il primo diverso) in out fino a quando trovo '\0' che è il carattere di terminazione della stringa. Nel frattempo è anche aumentato l'indirizzo puntato da out e quindi per stampare tutta la stringa bisogna tornare al suo indirizzo "originario" e per fare ciò ho utilizzato la variabile distanza che ha il compito di tenere di quanto aumenta l'indirizzo di out.