Odwracanie łańcucha wskaźnikami

0

Witam, próbuje napisać program odwracający łańcuch znaków w C.

Niestety nie wiem czemu zamiast "hgfedcba" otrzymuję "hgfeefgh" na wyjściu. Gdzie leży problem?

#include <stdio.h>
#include <stdlib.h>
void revString(char* s)
{
    char* s2 = s;
    char temp;
    while (*s2)
        s2++;
    while (*s) {
        *s = *(--s2);
        s++;
    }
}
int main()
{
    char s[10] = "abcdefgh";
    revString(s);
    printf("%s", s);
    return 0;
}
0

Przejdź debuggerem przez wykonanie programu. Przypisujesz ostatni znak do pierwszego, a gdzie przypisujesz pierwszy do ostatniego?

1

Tak w ogóle to ten kod nie ma sensu nawet po poprawieniu podmieniania znaków. Pętla ma działać dopóki się wskaźniki nie miną. Inaczej znaki będą odwrócone dwa razy, np raz gdy s wskazuje na początek, a s2 na koniec, a drugi raz w sytuacji odwrotnej. Podwójne odwrócenie da w wyniku postać początkową, więc efektu faktycznie nie będzie.

0

Sprawdziłem debuggerem, problemem są tu adresy wskaźników obydwu wskaźników s i s2. Jak zrobić taki kod aby uniknąć tych problemów?

1

Na mój gust zamiast while (*s) zrób while (s < s2). Oczywiście nie zapomnij zrobić poprawnego podmieniania znaków, a nie tylko nadpisania jednego znaku drugim jak to robisz teraz.

1 użytkowników online, w tym zalogowanych: 0, gości: 1