Cześć
Mam nadzieję, że tutaj znajdę pomoc, bo od kilku dni głowie się nad problemem i nie mogę sobie poradzić.
Tworzę projekt kodowania huffmana i wykorzystuje do tego drzewo binarne. Jak na razie wszystko szło w miarę gładko, tzn udało mi się stworzyć listę korzeni oraz później z korzeni zrobić drzewo. Mam też funkcję, która wypisuje kod każdej litery w drzewie - przechodząca przez drzewo aż znajdzie odpowiednią literę i wypisuje jej kod. Kod litery jest tworzony poprzez dodanie cyfry 0 lub 1 do łańcucha znaków w zależności czy idziemy do lewego korzenia czy do prawego - funkcja jest rekurencyjna.
void pokaz_drzewo(list *temp, char *ch)
{
int len_buff = strlen(ch);
char buff[len_buff];
if (!temp->node->lewy)
{
printf("znak: %c, kod:%s \n", temp->node->znak, ch);
}
if (temp->node->lewy != NULL)
{
strcpy(buff, ch);
char_append(buff, '0');
pokaz_drzewo((void *)temp->node->lewy, buff);
}
if (temp->node->prawy != NULL)
{
strcpy(buff, ch);
char_append(buff, '1');
pokaz_drzewo((void *)temp->node->prawy, buff);
}
Problem narodził się jak chciałem pozbyć się prymitywnego "printf" jako wynik funkcji, a owy wynik zapisać do zewnętrznego C-stringa.
Stworzyłem sobie funkcję nadrzędną "koduj_wiadomość":
void koduj_wiadomosc(list *root, char msg[])
{
char zakodowany_znak[10] = "";
for (int i = 0; i < strlen(msg) - 1; i++)
{
koduj_znak(root, msg[i],"", zakodowany_znak);
printf("%s\n", zakodowany_znak);
}
}
W której wywołuje funkcję podrzędną "koduj_znak":
void koduj_znak(list *root, char ch, char *tmp,char *kod)
{
int len_buff = strlen(tmp);
char buff[len_buff];
if (root->node)
{
if (root->node->lewy)
{
strcpy(buff, tmp);
char_append(buff, '0');
koduj_znak((void *)root->node->lewy, ch, buff,kod);
}
if (root->node->prawy)
{
strcpy(buff, tmp);
char_append(buff, '1');
koduj_znak((void *)root->node->prawy, ch, buff,kod);
}
}
if (root->node->znak == ch)
{
printf("%s\n", tmp);
strcpy(tmp,kod);
return;
}
}
Założenie jest takie aby funkcja "koduj znak" zapisała do przekazanej tablicy odpowiedni ciąg C-stringa. Później sobie ten ciąg jeszcze będę przetwarzał. Jednak niestety co bym nie próbował to nie mogę skopiować C-stringa stworzonego w wyniku działania funkcji do tablicy. Próbowałem też używać malloca ale ostatecznie funkcja zwracała adres 0x1 i wywalało bład. Próbowałem podpisać debuggera ale zauważyłem to co już wiedziałem, czyli "strcp" nie kopiuje wartości z jednej tablicy do drugiej.
Pewnie coś nie tak ustawiłem na wskaźnikach ale moja wiedza już się skończyła i nie wiem jak z tego wybrnąć.
Proszę o pomoc bo już rew włosy z głowy ;)
Pozdrawiam
G!