Ti illumino un po...
dichiari un puntatore char ed assegni staticamente una buffer che ovviamente non protrai mai modificare. Allo stesso ptr (s) chiedi 4 chars di memorica dinamica ma devi considerare che le stringhe necessitano di un ulteriore char di spazio per il terminatore. Poi dovresti deallocare lo spazio con free prima di uscire. Il main dovrebbe essere cosi:
int main () {
char *s;
s=malloc(sizeof(char)*(4+1));
strcpy (s,"roma");
printf("%s\n",reverse(s));
free (s);
return 0;
}
Poi nella funzione reverse mi sembra di vedere che vai a scrivere nella stessa zona di memoria.
Bisogna fare attenzione, nell'incertezza potresti allocare uno spazio analogo e copiare il tuo buff rovesciato. Tipo:
char *reverse (char *s)
{
int len=strlen(s);
char *tmp,*p;
tmp=malloc(len+1);
tmp[len--]='\0';
for (p=s;*p;p++,len--)
*(tmp+len)=*p;
strcpy (s,tmp);
free (tmp);
return s;
}
Ora prova a compilare e segui con un debug eventuali errori che ho fatto.
~Max