In my opinion the memory allocation should be caller responsibility. Moreover, never ever use
gets
function.
Try
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char * reverse( char * rev, const char * str, size_t length )
{
size_t n;
for (n=0; n<length; ++n)
{
rev[n] = str[length-1-n];
}
rev[n] ='\0';
return rev;
}
int main()
{
char s[100];
printf("please enter the string:\n");
if ( ! fgets( s, sizeof(s), stdin) ) return -1;
size_t length = strlen(s);
char * r = (char *) malloc( length+1 );
if ( ! r ) return -2;
reverse( r, s, length);
printf("reversed: %s\n", r);
free(r);
return 0;
}