ARRAY_SIZE(a) (sizeof(a) / sizeof(a[0]))



  • Hallo!

    Die Anzahl der Elemente eines Arrays läßt sich einfach mit

    #define ARRAY_SIZE(a) (sizeof(a) / sizeof(a[0]))
    

    feststellen.

    Wende ich dieses Macro auf ein Array von Zeigern an, etwa

    char *choices[] = {
                            "Choice 1",
                            "Choice 2",
                            "Choice 3",
                            "Choice 4",
                            "Exit",
                            (char *)NULL,
                      };
    
    /* ... */
    
    int n_choices = ARRAY_SIZE(choices);
    

    ist n_choices stets 4.

    Was mache ich falsch, gibt es eine alternative zu diesem Macro?

    Danke!

    Gruß
    Michael



  • Du mußt irgendwas falsch machen. Bei mir kommt 6 raus.



  • was macht eigentlich dieses /sizeof(a[0]) ??? ich mein ist die berechnung net total falsch wenn alle einträge 255 zeichen haben und eintrag 0 nur 3 zeichen hat?!?! 😕



  • *** schrieb:

    ich mein ist die berechnung net total falsch wenn alle einträge 255 zeichen haben und eintrag 0 nur 3 zeichen hat?!?! 😕

    Moin!

    Nein, da es sich ja um ein Array von Zeigern handelt,
    ist sizeof(a[0]) die Groesse eines Pointers; wie lang ein
    Eintrag ist tut nichts zur Sache 😉

    gruß,
    walker



  • Ah gut zu wissen, wer hätte das gedacht 😃


Anmelden zum Antworten