Для начинающих функция gets
является небезопасной функцией и не поддерживается стандартом C.
Вам следует использовать стандартную C функцию fgets
.
Там две проблемы с вашим кодом. Первый в этом l oop
for(i=strlen(input_str)-1;i>0;i--){
new_str[j]=input_str[i];
j++;
}
индекс i, равный 0, пропускается при его использовании для копирования соответствующего символа исходной строки.
Второй - массив назначения, к которому не добавляется завершающий нулевой символ.
Вот демонстрационная программа, которая показывает, как можно реализовать функцию, которая создает обратную копию исходной строки. .
#include <stdio.h>
#include <string.h>
char * reverse_copy( char *dsn, const char *src )
{
size_t n = strlen( src );
size_t i = 0;
for ( ; i < n; i++ )
{
dsn[i] = src[n - i - 1];
}
dsn[i] = '\0';
return dsn;
}
int main(void)
{
enum { N = 10 };
char input_str[N] = "";
char new_str[N];
printf( "Enter a string (less than %zu symbols): ", ( size_t )N );
fgets( input_str, N, stdin );
input_str[ strcspn( input_str, "\n" ) ] = '\0';
printf( "\"%s\"\n", input_str );
printf( "\"%s\"\n", reverse_copy( new_str, input_str ) );
return 0;
}
Вывод программы может выглядеть, например, следующим образом
Enter a string (less than 10 symbols): Hello
"Hello"
"olleH"