Länge eines Arrays

  • Hallo, ich bräucht ein wenig Hilfe.

    Ich würde gerne wissen wie ich die Länge eines Arrays herausfinden kann.

    Also wenn ich ein Array[] mit irgendwas befülle würd ich gern im nächsten schritt wissen wie lang das array is und das dann als zusätzlihce variable ausgeben.

    lg

  • passt, hab das jetzt herausgefunden:

    laenge = sizeof(array)/sizeof(array[0]);

    hab auch noch #include <string> oben angeführt

    hoff es passt, bei mir gehts

  • über sizeof() - ja dass kansst machen, dabei ist wichtig was du für nen Typ des Array's hast.
    Du kanns aber ein arary in eniem Schleife durchführen um die Anzahl der Elemente zu bekommen.

    Ja, die Sting Objekte sind schon mit direktem Befehl dafür ausgerüstet.

    Siehe auch 'Vektor' zum Thema.

    GL

    No pain no gain.

  • In C mit sizeof die Größe eines Arrays herausfinden funktioniert nur, wenn es am stack alloziert ist, und nur in der Funktion in der es erzeugt wurde. In genau den Fällen nimmt man aber normalerweise eher eine Konstante, zB:

    Code
    #define ITEMCOUNT 4711
    
    
    void fkt() {
      int array[ITEMCOUNT];
      for(unsigned i = 0; i < ITEMCOUNT; i++) {
        array[i] = i;
      }
    }

    Für den Normalfall gibt es einfach keine Möglichkeit. Das ist der Grund, warum strings in C einen '\0'-Character am Ende haben (strlen() tut nichts anders als das array bis zum ersten \0 durchzulaufen und mitzuzaehlen), und du bei fast allen Funktionen die ein nicht-string-array übergeben bekommen die Größe als extra Parameter mitangeben musst (siehe zB argc bei der main-Funktion).

    [font=verdana,sans-serif]"An über-programmer is likely to be someone who stares quietly into space and then says 'Hmm. I think I've seen something like this before.'" -- John D. Cock[/font]

    opentu.net - freier, unzensierter Informationsaustausch via IRC-Channel!
    Hilfe und Support in Studienangelegenheiten, gemütliches Beisammensein, von und mit Leuten aus dem Informatik-Forum!

  • In C mit sizeof die Größe eines Arrays herausfinden funktioniert nur, wenn es am stack alloziert ist, und nur in der Funktion in der es erzeugt wurde.


    Das stimmt nicht, es ist überhaupt kein Problem, ein Array im file scope zu deklarieren und dann die sizeof-Technik anzuwenden. Die funktioniert überall, wo eine Deklaration, die das Objekt als Array deklariert (im Gegensatz zu Deklarationen, die so aussehen, als würden sie es als Array deklarieren, aber trotzdem einen Pointer deklarieren -- nämlich in Funktionsköpfen), sichtbar ist.

    Mit der Konstante hast du aber völlig recht.

    *plantsch*

  • Ok, im scope reicht, stimmt :)

    Ich weiß nicht, ob Funktionen wie

    Code
    void fkt(int table[25]);

    erlaubt sind... gesehen hab ich das noch nie (und ich hab schon verdammt viel C-code gesehen).

    [font=verdana,sans-serif]"An über-programmer is likely to be someone who stares quietly into space and then says 'Hmm. I think I've seen something like this before.'" -- John D. Cock[/font]

    opentu.net - freier, unzensierter Informationsaustausch via IRC-Channel!
    Hilfe und Support in Studienangelegenheiten, gemütliches Beisammensein, von und mit Leuten aus dem Informatik-Forum!

  • Ich weiß nicht, ob Funktionen wie

    Code
    void fkt(int table[25]);

    erlaubt sind... gesehen hab ich das noch nie (und ich hab schon verdammt viel C-code gesehen).


    Kann schon sein, daß du sowas schon mal gesehen hast -- versteckt hinter irgendeinem typedef zum Beispiel. Das ist auch einer der Gründe, warum es sinnvoll ist, sowas zu erlauben: Prinzipiell soll es dir nicht verwehrt sein, Objekttypen als Funktionsparameter anzugeben.

    Allerdings gilt "A declaration of a parameter as ‘‘array of type’’ shall be adjusted to ‘‘pointer to type’’..." (in C99 ist das 6.7.5.3, Punkt 6). D.h. es ist genau gleichbedeutend mit

    Code
    void fkt(int *);

    , und die Grenze wird nie irgendwo überprüft. (Gut, ein Compiler könnte das als Fleißaufgabe versuchen.)

    *plantsch*

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!