Stos ksiązek

0

Witam
Tworzę sobie pewien projekt na zajęcia (stos książek), ale mam pewien problem, który od wczoraj nie daje mi spokoju...
Mianowicie po uruchomieniu programu jak podam pierwszy tytuł książki i o wyświetlę to wszystko jest w porządku, ale gdy to samo chcę zrobić z drugim tytułem to wtedy dwa razy wyświetla mi się ten drugi tytuł, gdy wpisuje trzeci tytuł to na wyjściu ma 3 razy ten trzeci tytuł itd.
Co jest tego przyczyną? Jak to naprawić? Jakieś sugestie?

 
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

struct stos {
    char *key;
    struct stos *next;
};

struct stos *dodaj(struct stos *stack, char *tytul) {
    struct stos *tmp = (struct stos *)malloc(sizeof(struct stos));

    tmp->key = tytul;
    tmp->next = stack;
    stack = tmp;
    return stack;
}

void wyswietl(struct stos *stack) {
    if(stack == NULL)
        printf("Stos jest pusty.\n");
    else
        while(stack != NULL) {
            fputs(stack->key, stdout);
            stack = stack->next;
    }
}

int main(int argc, char *argv[]) {
    struct stos *stack = NULL;
    char *tytul;
    char znak[100];
    int rozkaz;

    while(1) {
        printf("\nOpcja wyboru (1-dodaj dane | 3-wyswietl dane): \n");
        printf("Wybor = ");
        scanf("%d", &rozkaz);
        system("cls");
        switch(rozkaz) {
            case 1:
            {
                printf("Podaj tytul ksiazki:\n");
                fflush(stdin); //czyszczenie bufora
                tytul = fgets(znak, 100, stdin);
                stack = dodaj(stack, tytul);
            }break;

            case 3:
            {
                wyswietl(stack);
            }break;

            default:
                printf("Zla opcja wyboru. Wprowadz poprawna.\n");
            break;
        }
    }

    system("PAUSE");
    return 0;
}
0
tmp->key = tytul;

Kopiujesz wskaźnik (adres), a nie jego zawartość. Jeśli chcesz kopiować treść możesz użyć strdup, ale potem musisz pamiętać o zwolnieniu pamięci za pomocą free

0

Dzięki wielkie.
Działa

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