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 vielleichtconst 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 gebrachtsizeof() 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!!!!