После этого l oop
while (*sPtr != '\0') {
++length;
++sPtr;
}
указатель sPtr указывает на конечный ноль. Итак, в следующем l oop вы начинаете выводить строку из неопределенного символа после завершающего нуля.
for (int i = length; i >= 0; --i) {
printf("%c", *(sPtr+1));
}
Выражение *(sPtr+1)
не изменяется в l oop.
Учтите, что вы не переворачиваете строку. Вы пытаетесь вывести строку в обратном порядке. Это не то же самое. Также вы используете промежуточную переменную типа int.
Чтобы перевернуть строку, используя только указатели, код может выглядеть следующим образом.
char *last = sentence;
while ( *last ) ++last;
if ( sentence != last )
{
for ( char *first = sentence; first < --last; ++first )
{
char c = *first;
*first = *last;
*last = c;
}
}
printf( "Reversed string = %s\n", sentence );
Вот демонстрационная программа.
#include <stdio.h>
int main(void)
{
char sentence[100] = { '\0' };
printf( "Enter any string: " );
scanf("%99[^\n]s", sentence );
char *last = sentence;
while ( *last ) ++ last;
if ( sentence != last )
{
for ( char *first = sentence; first < --last; ++first )
{
char c = *first;
*first = *last;
*last = c;
}
}
printf( "Reversed string = %s\n", sentence );
return 0;
}
Его вывод может выглядеть как
Enter any string: Hello Jordan
Reversed string = nadroJ olleH
Вы можете написать отдельную функцию, которая переворачивает строку. Просто переместите код, который переворачивает строку из main, в отдельную функцию, например
#include <stdio.h>
char * reverse( char *s )
{
char *last = s;
while ( *last ) ++last;
if ( s != last )
{
for ( char *first = s; first < --last; ++first )
{
char c = *first;
*first = *last;
*last = c;
}
}
return s;
}
int main(void)
{
char sentence[100] = { '\0' };
printf( "Enter any string: " );
scanf("%99[^\n]s", sentence );
printf( "Revresed string = %s\n", reverse( sentence ) );
return 0;
}
Если вы хотите просто вывести строку в обратном порядке с помощью указателей, тогда программа может быть очень простой.
Вот, пожалуйста.
#include <stdio.h>
int main(void)
{
char sentence[100] = { '\0' };
printf( "Enter any string: " );
scanf("%99[^\n]s", sentence );
const char *sPtr = sentence;
while ( *sPtr ) ++ sPtr;
printf( "Revresed string = ");
while ( sPtr != sentence ) putchar( *--sPtr );
putchar( '\n' );
return 0;
}
Еще более простую реализацию вы можете сделать с помощью рекурсивной функции. Например
#include <stdio.h>
void reversed_output( const char *s )
{
if ( *s )
{
reversed_output( s + 1 );
putchar( *s );
}
}
int main(void)
{
char sentence[100] = { '\0' };
printf( "Enter any string: " );
scanf("%99[^\n]s", sentence );
printf( "Revresed string = ");
reversed_output( sentence );
putchar( '\n' );
return 0;
}