Anzahl der Einträge einer Liste ermitteln



  • Hi,

    ich möchte eine flexibel erweiterbare Liste in einer for - schleife Element
    für Element an eine andere Funktion übergeben und würde als Bedingung zum Beenden der Schleife gerne die Anzahl der Listenelemente verwenden.

    Gibt es eine Funktion die die
    Anzahle der Elemente einer solchen Liste ermittelt?

    Meine Listendefinition sieht wie folgt aus:

    int main()
    {
       char *seek_sign[] = {"@far",".interupt","@","far","using[1]","using[3]"};
    

    Gruss!



  • Zählen! Ich seh da 6 Stück. Und wenn dir das zu profan ist, schreibst du
    noch irgendwo const count = 6; hin. Sieht dann gleich viel schicker aus.



  • @Taurin
    Er will es doch flexibel haben, meinst du mit flexibel vielleicht

    const int 6;
    

    ????

    Du könntest zum Beispiel das Ende deiner Liste mit einem speziellen String(END) markieren und solange inkrementieren, bis der String erreicht ist!

    #include <stdio.h>
    #include <string.h>
    
    int main()
    {
    char *seek_sign[] = {"@far",".interupt","@","far","using[1]","using[3]","END"};
    int lst_size=0;
    
    while ( strcmp(seek_sign[lst_size],"END") )
        lst_size++;
    
    printf("%d\n", lst_size); //gibt 6
    
    return 0;
    }
    

    Tschö 🤡



  • Hallo,

    das aber auch:

    printf("%i\n", (sizeof(seek_sign)/sizeof(char*)) );
    


  • Meiner Meinung nach ist das ein Array und keine Liste :), bei einer Liste bräuchtest du die Anzahl nicht



  • Horst2 schrieb:

    Meiner Meinung nach ist das ein Array und keine Liste

    ist es auch. ein array von char-pointern.

    Horst2 schrieb:

    bei einer Liste bräuchtest du die Anzahl nicht

    warum nicht?



  • Es funktioniert!

    @/bin/bashOR:
    Dein Vorschlag hat's gebracht

    @Taurin:
    Natürlich könnte ich auch einfach zählen, aber das wär ja vollkommen witzlos!



  • tuttmaster schrieb:

    @/bin/bashOR:
    Dein Vorschlag hat's gebracht

    sizeof() ist besser (jedenfalls wenn die grösse des arrays beim compilieren feststeht). da wird kein zusätzlicher code benötigt sondern es ist einfach eine feste zahl.



  • @ bin/bash0r

    Hast du ICQ..... weil dann kann man sich besser schreiben, wegen Ideen und so !



  • net schrieb:

    Horst2 schrieb:

    Meiner Meinung nach ist das ein Array und keine Liste

    ist es auch. ein array von char-pointern.

    Horst2 schrieb:

    bei einer Liste bräuchtest du die Anzahl nicht

    warum nicht?

    z.B. bei einer verketteten Liste sollte der letzte Eintrag immer auf NULL zeigen und dann kann man dies abprüfen



  • @net:
    sizeof() hatte ich auch ausprobiert, ging auch zu kompilieren, allerdings ist mir beim ausführen des Programms eben jenes jedesmal abgeschmiert!



  • tuttmaster schrieb:

    @net:
    sizeof() hatte ich auch ausprobiert, ging auch zu kompilieren, allerdings ist mir beim ausführen des Programms eben jenes jedesmal abgeschmiert!

    muss ein anderer fehler gewesen sein. in deinem beispiel..

    char *seek_sign[] = {"@far",".interupt","@","far","using[1]","using[3]","END"};
    

    ergibt:
    sizeof(seek_sign)/sizeof(char*) --> 7



  • Hab meinen Fehler gefunden!

    sizeof(seek_sign)/sizeof(char*)

    funktioniert jetzt auch bei meiner for - schleife:

    for(x=0;x<sizeof(seek_sign)/sizeof(char*);x++)
              prozedur(seek_sign[x]);
    

    Abgeschmiert ist das Programm, wenn ich anstatt

    x < sizeof(seek_sign)/sizeof(char*)

    die Bedingung:

    x <= sizeof(seek_sign)/sizeof(char*)

    gewählt hab. Aber warum der ausgerechnet dann abstürzt, weis ich immer noch nicht.



  • tuttmaster schrieb:

    Abgeschmiert ist das Programm, wenn ich anstatt

    x < sizeof(seek_sign)/sizeof(char*)

    die Bedingung:

    x <= sizeof(seek_sign)/sizeof(char*)

    gewählt hab. Aber warum der ausgerechnet dann abstürzt, weis ich immer noch nicht.

    ersteres zählt von 0 bis 6
    der andere von 0 bis 7, also wohl 1 zu weit



  • AHHHHHHHHHH........mir fällt es wie Schuppen aus den Haaren

    Hatte ja total verdrängt, das beim Aufruf bei 0 angefangen wird!!!!


Anmelden zum Antworten