#include <stdlib.h>  // for malloc()
#include <string.h>  // for strlen()
#include <assert.h>  // for assert()

int ReverseString(char *in, char **out) {
  // defensive programming
  assert(in != NULL);
  assert(out != NULL);

  // allocate space for the new string
  int len = strlen(in), i;
  char *ret = (char *) malloc((len+1) * sizeof(char));
  if (ret == 0)
    return 0;

  // copy, but in reverse order
  for (i = 0; i < len; i++)
    ret[(len-1) - i] = in[i];

  // null terminate
  ret[len] = '\0';

  // return our output
  *out = ret;
  return 1;
}