• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Problem z funkcją string_merge- łączenie tablic char w jedną.

Object Storage Arubacloud
0 głosów
685 wizyt
pytanie zadane 22 września 2015 w C i C++ przez Sprintek Nowicjusz (160 p.)

Mam problem z zadaniem, którego treść i rozwiązanie załączam poniżej. Problem polega na tym, że program się kompiluje, nie pokazuje błędów, natomiast wywala go podczas wyświetlania. Byłbym wdzięczny za sprawdzenie poprawności.

Napisz funkcję:

char* string_merge(char *, char *);

która sklei ze sobą dwa łańcuchy biorąc na przemian po jednym znaku z każdego łańcucha i umieści w nowej dynamicznie alokowanej tablicy znaków, do której zwróci wskaźnik. Należy wziąć po tyle znaków ile jest w krótszym łańcuchu.

char *string_merge(char *tab1, char *tab2)
{
    int i=0;
    int j=0;
    char *tab=(char*)malloc(2*sizeof(tab1));
    if(sizeof(tab2)>sizeof(tab1))
    {
        while(*(tab1+j)!=EOF)
        {
            tab[i]=tab1[j];
            tab[i+1]=tab2[j];
            i+=2;
            j++;
        }
    }
    else
    {
        while(*(tab2+j)!=EOF)
        {
            tab[i]=tab2[j];
            tab[i+1]=tab1[j];
            i+=2;
            j++;
        }

    }
    return tab;
}

int main()
{
    int i;
    char *tab1="kotek";
    char *tab2="pawi";
    char *tab;
    tab=string_merge(tab1,tab2);
    for(i=0;i<8;i++)
    {
        printf("%s", *(tab+i));
    }
    free(tab);

    return 0;
}

2 odpowiedzi

0 głosów
odpowiedź 23 września 2015 przez WWOTEX Mądrala (6,200 p.)

Pamiętaj, że zawsze wskaźnik użyty bez gwiazdki oznacza sam wskaźnik, czyli numer(adres) zmiennej na którą wskazuje.... przeanalizuj ten kod pod kątem właśnie tej GWIAZDKI
 

char moj_char = 'W';
char *wskaznik = &moj_char;
___________________________

cout << wskaznik;   -----> zwróci adres zmiennej szesnastkowo czyli np.      FFDA8



cout << *wskaznik;  -------> zwróci wartość zmiennej czyli :                W

Powodzenia :)

 

komentarz 23 września 2015 przez Sprintek Nowicjusz (160 p.)
Tak jest, pamiętam o tym. Troszkę zmieniłem kod, ale nadal ten sam problem.
0 głosów
odpowiedź 23 września 2015 przez criss Mędrzec (172,590 p.)

sizeof(tab2)>sizeof(tab1) - porownujesz ze soba 2 wskazniki na char. Nigdy jeden nie bedzie wiekszy od drugiego, dlatego zawsze wykona sie else. 
Btw czym jest ten EOF?

komentarz 23 września 2015 przez Sprintek Nowicjusz (160 p.)
Hmm, a masz jakiś pomysł jak sprawdzić który ciąg charów jest dłuższy?

EOF to znak końca linii (popraw mnie jeśli się mylę).

Btw dzięki za odp!
komentarz 23 września 2015 przez Muminek Dyskutant (8,650 p.)

z tego co kojarzę to znakiem końca lini jest endl (end of line); oraz "\n". sprawdzałem eof i nie daje nowej lini

komentarz 23 września 2015 przez criss Mędrzec (172,590 p.)
Szczerze to nie wiem - wg mnie bezpieczniej '\n'. Dlugosc musisz chyba przekazywac jako kolejne argumenty funkcji, inaczej sie nie da. Albo dzialac na stringach zamaist tablicach charów i wtedy masz dostępną metode length()
komentarz 23 września 2015 przez Sprintek Nowicjusz (160 p.)
Dzięki Panowie za rady, zaraz spróbuję. :)

Podobne pytania

0 głosów
0 odpowiedzi 223 wizyt
0 głosów
1 odpowiedź 142 wizyt
0 głosów
1 odpowiedź 827 wizyt
pytanie zadane 26 marca 2020 w C i C++ przez Hubertius Bywalec (2,970 p.)

92,555 zapytań

141,403 odpowiedzi

319,554 komentarzy

61,940 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...