Zamiana spacji (z pierwszej tablicy do drugiej) na "_"

0

wie ktoś dlaczego 'program przestał działać'

#include <stdio.h>

void copy_n(char* W1, char* W2)
{
    while (*W2) {
        if (*W2 == ' ') //jeśli bym dał *W2++ to by się zwiększało zawsze, czy tylko przy spełneniu warunki if (*W2 ==' ')
            *W1 = '_';
        else
            *W1 = *W2;
        *W1++;
        *W1++;
    }
    *W1 = '\0';
}

int main(void)
{
    char z_tab[5] = "t k";
    char do_tab[5];
    copy_n(do_tab, z_tab);
    puts(do_tab);
    return 0;
}

0
        *W1++;
        *W1++;

Znów Kopi-Pejst i jego metoda.

0

dlaczego ja jestem taki nie uważny, 0_0

  while (*W2) {
        if (*W2++ == ' ')
            *W1++ = '_';
        else
            *W1++ = *W2++;

co się dzieje dla takich instukcji, bo patrze na debug i on zamienia wszystko na spacje, nie wiem dlaczego

2

Nie zamienia wszystkiego, ale robisz dwie inkrementacje zamiast jednej (i pomijasz sprawdzenie czy *W2) jeśli *W2++ nie będzie ' '

Jak chcesz to koniecznie skrócić to następujące powinno działać:

while(*W2) {
    char c = *W2++;
    *W1++ = c == ' ' ? '_' : c;
}
0

a takie pytanie, w kodzie w instukcjach zwiększających indeks
*W1++; *W2++;
tam jak napisze W1++ to działanie jest takie samo jak *W1++, czym się różni od *W1++. W drugim przypadku jest zwiększane W2 o 1 , jego adres jest zwiększony o 1 , a w 1 przypadku jest zwiększany adres W1 o 1, a jaką rolę pełni tutaj *, ona jest bez sensu? nie powinien wyskoczyć błąd

0

postfix operator++ inkrementuje zmienną i zwraca jej poprzednią wartość. Czyli w tym wypadku dokonujesz dereferencji wskaźnika, "jednocześnie" go inkrementując

0

ale ta dereferencja nie jest nigdzie wpisywana, i tutaj jest bez sensu?

1

Ach, zacytowałeś *W1++ jako całe wyrażenie. Wtedy tak, dereferencja jest zbędna.

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