Это утверждение
strcpy(OriginalString2, OriginalString1);
не имеет смысла, поскольку указатель OriginalString2
имеет неопределенное значение.Он не был инициализирован.
И эти объявления
char reversestring[sizeof(OriginalString2)];
char revstr[sizeof(OriginalString2)];
не имеют смысла, потому что используется размер указателя, а не размер строки, на которую указывает указатель.
Если ваш компилятор поддерживает массивы переменной длины, вы можете написать
char reversestring[strlen(OriginalString2) + 1];
Также плохо, что функция Reverse_String
использует глобальную переменную ptr
.Вы можете определить его в функции.
И этот цикл
for(i=0; *(OriginalString+i) != '\0'; i++)
{
*ptr = *(OriginalString+i);
ptr++;
}
не копирует исходную строку в обратном порядке.
Функция может выглядеть следующим образомкак показано в демонстрационной программе.
#include <stdio.h>
#include <string.h>
char * reverse_copy( const char *s1, char *s2 )
{
size_t n = strlen( s1 );
size_t i = 0;
for ( ; i < n; i++)
{
s2[i] = s1[n - i - 1];
}
s2[i] = '\0';
return s2;
}
int main(void)
{
const char s1[] = "Hello Vijay";
char s2[sizeof( s1 )];
reverse_copy( s1, s2 );
puts( s1 );
puts( s2 );
return 0;
}
Вывод программы:
Hello Vijay
yajiV olleH
Если вы не хотите (или не можете) использовать стандартную функцию C strlen
и хотите использовать указатели, тогда функция может выглядеть следующим образом
#include <stdio.h>
char * reverse_copy( const char *s1, char *s2 )
{
const char *in = s1;
while ( *in != '\0' ) ++in;
char *out = s2;
while ( in != s1 )
{
*out++ = *--in;
}
*out = '\0';
return s2;
}
int main(void)
{
const char s1[] = "Hello Vijay";
char s2[sizeof( s1 )];
reverse_copy( s1, s2 );
puts( s1 );
puts( s2 );
return 0;
}
Вывод программы такой же, как указано выше
Hello Vijay
yajiV olleH