Ciao, mi hai fatto pensare che in effetti il codice che ho scritto non era molto efficente (meglio usare i puntatori che l'accesso tramite []), quindi si può ancora fare:
codice:
void invert(char *s)
{
  if( !s )
    return;
  char *i = s;
  char *ii = s;
  
  while( *ii )
    ii++;
  ii--;

  while( i != ii )
  {
    // o così
    *i  = *i ^ *ii;
    *ii = *i ^ *ii;
    *i  = *i ^ *ii;
    // o più chiaramente
    char c = *i;
    *i = *ii;
    *ii = c;
    i++;
    ii--;
  }
}