Celebron ha ragione, per prima cosa l'interfaccia della funzione deve essere:

char* funzione(char *stringa_dove_cercare, char *stringa_da_cercare);


Poi c'è una questione da considerare, se nella tua funzione tu fai:

codice:
char esito[MAXNUM];

/*codice della funzione*/

return esito;
il compilatore dovrebbe darti un warning del tipo: "function 'funzione' return a local variable", che ti indica che tu ritorni come risultato della funzione una stringa variabile locale di 'funzione' e che quindi, terminata questa funzione, cesserà di esistere!
Per far si che "continui ad esistere" dopo che 'funzione' è terminata e che quindi possa essere correttamente ritornata occorre allocare dinamicamente, facendo:

codice:
char* esito;
esito = (char*) malloc (MAXNUM*sizeof(char));
/*codice della funzione*/
return esito;
Nel main però è fondamentale, prima di terminare il programma, liberare la memoria allocata con la free(). Quindi ti conviene fare tipo:

codice:
char* result;
result = funzione (v, w);

/*usi result come ti serve*/

free (result);
return 0;
Detto ciò, come evidenziato da Celebron, la tua funzione non funziona ( ) molto, ma è un altro paio di maniche!