В объявленном символьном массиве нет строки
{ char str[500];
int n;
Массив символов не инициализирован. Таким образом, этот вызов
n = strlen(str);
приводит к неопределенному поведению.
Этот фрагмент кода из функции reversestring
printf("enter the string:\n");
scanf("%s", string);
должен находиться вне функции и использоваться до того, как функция будет call.
Функция должна быть объявлена как минимум как
char * reversestring( char string[], size_t n );
Нет необходимости объявлять функцию с тремя параметрами, как вы это сделали
void reversestring(char string[], int start, int end);
, потому что вызов этой функции может быть заменен вызовом предыдущей показанной функции, такой как
reversestring( string + start, end - start + 1 );
Также обратите внимание на то, что использование формата %s
не позволяет вводить предложение. Более того, использование этого спецификатора формата с функцией scanf
небезопасно, а функция strlen
имеет тип возврата size_t
.
Вот определение функции
char * reversestring( char s[], size_t n )
{
for ( size_t i = 0; i < n / 2; i++ )
{
char c = s[i];
s[i] = s[n-i -1];
s[n-i-1] = c;
}
return s;
}
Здесь демонстрационная программа.
#include <stdio.h>
#include <string.h>
char * reversestring( char s[], size_t n )
{
for ( size_t i = 0; i < n / 2; i++ )
{
char c = s[i];
s[i] = s[n-i -1];
s[n-i-1] = c;
}
return s;
}
int main(void)
{
enum { N = 500 };
char s[N];
printf( "Enter a string: " );
fgets( s, N, stdin );
s[ strcspn( s, "\n" ) ] = '\0';
size_t n = strlen( s );
puts( reversestring( s, n ) );
char *p = strchr( s, ' ' );
if ( p != NULL && ( p = strchr( p + 1, ' ' ) ) != NULL )
{
reversestring( s, p - s );
puts( s );
}
return 0;
}
Ее вывод может выглядеть, например, как
Enter a string: Hello Shivam Gupta
atpuG mavihS olleH
Shivam Gupta olleH