Primero quiero aclarar una cosa: ya hay una función para calcular la longitud de una cadena xD. Se llama strlen y puedes usarla al incluir string.h.
Segundo, recomiendo no retornar cadenas declaradas en una función (para mas detalles, pregunta). Lo que yo haría es intercambiar los valores de la cadena original para obtener el resultado final. Es decir, haría esto:
Tenemos la cadena llamada "cadena" (así de original soy) que equivale a "Esto es una cadena"
char cadena[] = "Esto es una cadena";
Lo que hay que hacer es recorrer la mitad de la cadena:
int longitud_cadena = strlen(cadena);
int i = longitud_cadena / 2 - 1;
while(i >= 0)
Por último, intercambia los valores:
intercambiar_valores(cadena[i], cadena[longitd_cadena - i]); // Esta función me la he inventado. Tendrás que diseñar tu mismo una función que intercambie valores o puedes intercambiar los valores directamente dentro del while.
____________________________
Por si no se ha entendido, esto es lo que está sucediendo:
Memoria donde se almacena la cadena:
'E' 's' 't' 'o' '_' 'e' 's' '_' 'u' 'n' 'a' '_' 'c' 'a' 'd' 'e' 'n' 'a' '\0'
Entonces, lo que hacemos es:
* *
'E' 's' 't' 'o' '_' 'e' 's' '_' 'u' 'n' 'a' '_' 'c' 'a' 'd' 'e' 'n' 'a' '\0'
Intercambiamos los valores marcados por los asteriscos. Los asteriscos marcan la posición dada por la variable 'i' y por la operación 'longtud_cadena - i', es decir, '18/2 - 1' y '18 - 18 - 18/2 - 1' respectivamente:
* *
'E' 's' 't' 'o' '_' 'e' 's' '_' 'n' 'u' 'a' '_' 'c' 'a' 'd' 'e' 'n' 'a' '\0'
En el siguiente ciclo, la variable 'i' se decrementa en 1. Entonces, ahora 'i' vale 7 y la operación 'longitud_cadena - i' vale 18 - 7:
* *
'E' 's' 't' 'o' '_' 'e' 's' '_' 'n' 'u' 'a' '_' 'c' 'a' 'd' 'e' 'n' 'a' '\0'
Intercambiamos los valores señalados por los asteriscos:
* *
'E' 's' 't' 'o' '_' 'e' 's' 'a' 'n' 'u' '_' '_' 'c' 'a' 'd' 'e' 'n' 'a' '\0'
Seguimos decrementando 'i':
* *
'E' 's' 't' 'o' '_' 'e' 's' 'a' 'n' 'u' '_' '_' 'c' 'a' 'd' 'e' 'n' 'a' '\0'
Intercambiamos...
* *
'E' 's' 't' 'o' '_' 'e' '_' 'a' 'n' 'u' '_' 's' 'c' 'a' 'd' 'e' 'n' 'a' '\0'
Y así hasta que i sea 0 (después el while se detendrá por la condición)
* *
'E' 'n' 'e' 'd' 'a' 'c' '_' 'a' 'n' 'u' '_' 's' 'e' '_' 'o' 't' 's' 'a' '\0'
Y como siempre, intercambiamos:
* *
'a' 'n' 'e' 'd' 'a' 'c' '_' 'a' 'n' 'u' '_' 's' 'e' '_' 'o' 't' 's' 'E' '\0'
Al final, obtenemos la cadena "anedac anuse otsE"