Hirdetés

Új hozzászólás Aktív témák

  • Sziasztok Mesterek!

    Van egy kódom alant, amiben neveket tároltam el láncolt listával. Van hozzá egy delete nevű fgv is, ami azt szeretné megcsinálni, hogy vár egy int számot és azt az elemet amit megadunk a szám által, törli a listából. A main-ben, hogy kellene hivatkozni a delete fgv-nek erre a számra?

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

    struct cn
    {

    char *name;
    struct cn *next;
    };

    struct cn *head = NULL;

    void insert(char *c)
    {
    struct cn *new;

    new = (struct cn*)malloc(sizeof(struct cn));
    new->name=c;
    new->next=head;
    head=new;
    }
    void printout()
    {
    struct cn *current;

    current = head;
    while(current)
    {
    printf("%s", current->name);
    current= current->next;
    }
    }
    void delete(int del)
    {
    struct cn *current, *previous;
    previous = 0;

    current = head;
    while(current)
    {
    if(current->name == del)
    {
    struct cn *temp = current;
    if(previous)
    {
    previous->next=current->next;
    }
    else
    {
    head = current->next;
    }
    current=current->next;
    free(temp);
    }
    else
    {
    previous=current;
    current=current->next;
    }

    }

    }

    int main()
    {

    insert("Eszter\n");
    insert("Bea\n");
    insert("Nóra\n");
    insert("Béla\n");
    insert("Peti\n");
    printout();
    return 0;
    }

    Érthető a kérdésem?

    Nem szerencsés a cn struktúrában csak a névre mutató pointert használni, el kellen tárolni benne magát a nevet. A példádban jól fog működni, mivel az insert argumentumában megadott nevek sztring konstansok, amiknek a fordító fix címet adott. De mi van akkor, ha pl. egy függvényből hívod az insert függvényt, aminek a hívó egy lokális változóját adod át név paraméterként (pl. billenttűzetről bekért input). Ha a hívó fv.-ből kilépsz, érvénytelen címre fognak mutogatni a cn struktúrád name mezői. Szerintem a name pl. char name[50] kell hogy legyen, és a name mezőbe strcpy-nal másold az insert fv. c paramétere által mutatott sztringet. Persze figyelj, nehogy túlírd a name tömböt. Most a cn struktúrád mérete 8 byte, mivel 2 pointert tartalmaz. A javasolt módosítás után 54 byte lesz.

Új hozzászólás Aktív témák