Lo primero que debe hacer es cambiar la definición de la función "main" y evitar el uso de "gets", por favor lee el tema
|Lo que no hay que hacer en C/C++. Nivel basico|.
El error principal en tu programa son las llamadas a la función cambio y strcat (esta ultima innecesaria):
cambio(destino[TAM],original[TAM]);
Solo debes utilizar los nombres de los arrays, de esta forma:
cambio(destino, original);
Y la función que invierte la cadena esta mal implementada, debería ser mas o menos así:
void reverse(char *dst, char const *src)
{
int i;
/* Encontramos el final de la cadena original */
for (i = 0; src[i] != '\0'; i++)
;
/* Almacenamos el indicador de fin de cadena */
dst[i] = '\0';
/* Copiamos los demas caracteres */
while (i-- > 0)
*dst++ = src[i];
}
Funciona pero con una limitante importante: no verifica la capacidad de los contenedores (arrays), si la cadena original sobrepasa la capacidad del array de destino el programa ...
Un saludo