Länge eines Arrays



  • Kommt drauf an ...

    Verwende ich ein Array, muß ich ihm auch Werte zuweisen. Als Ende nehme ich
    meistens einen NULL-Pointer. Mit einem Durchlauf läßt sich dann bequem die
    Länge ermitteln. Alternativ einfach mitzählen.



  • Scheppertreiber schrieb:

    Kommt drauf an ...

    Verwende ich ein Array, muß ich ihm auch Werte zuweisen. Als Ende nehme ich
    meistens einen NULL-Pointer. Mit einem Durchlauf läßt sich dann bequem die
    Länge ermitteln. Alternativ einfach mitzählen.

    😕



  • Scheppertreiber schrieb:

    Verwende ich ein Array, muß ich ihm auch Werte zuweisen. Als Ende nehme ich
    meistens einen NULL-Pointer. Mit einem Durchlauf läßt sich dann bequem die
    Länge ermitteln. Alternativ einfach mitzählen.

    und was machst du, wenn eine 0 mitten im array auftaucht?
    🙂



  • Die taucht nicht einfach auf.

    Ich habe von ein einem NULL-Pointer gesprochen, mal als Beispiel:

    char *p[] = { "Hallo", "Haha", "HUHU", NULL };
    
    for ( i=0; p[i] != NULL; i++)
       printf( "\n%s", p[i]);
    printf( "\nIch habe %d Pointer", i);
    


  • Scheppertreiber schrieb:

    Die taucht nicht einfach auf.

    Ich habe von ein einem NULL-Pointer gesprochen, mal als Beispiel:

    char *p[] = { "Hallo", "Haha", "HUHU", NULL };
    
    for ( i=0; p[i] != NULL; i++)
       printf( "\n%s", p[i]);
    printf( "\nIch habe %d Pointer", i);
    

    vielleicht ist dir entgangen, dass der OP nur ein einfaches char-array hat.
    🙂



  • Dann ist die Frage echt bescheuert. Er weiß doch, daß das Array 3 Elemente hat.



  • Scheppertreiber schrieb:

    Dann ist die Frage echt bescheuert. Er weiß doch, daß das Array 3 Elemente hat.

    Eigentlich wollte ich folgenden Java-Code in C umsetzen:

    String s = In.readLine();
    char[] c = s.toCharArray();
    for(int i=0; i<c.length, i++) {
        // irgendwas wird mit dem Array gemacht...
    }
    

    Da ich die Länge des Arrays im Moment der Programmausführung nicht kenne, wollte ich halt nur wissen ob es einen äquivalenten Befehl zu ArrayName.length gibt.



  • Tachyon schrieb:

    Wenn es ein statisches Array ist, dann so:

    int arr[20];
    int arr_len = sizeof(arr) / sizeof(arr[0]);
    

    Ja, genau so wie Tachyon es gesagt hat. Oder du machst dir ein define

    #define ArraySize(ARRAY)				(sizeof((ARRAY)) / sizeof((ARRAY)[0]))
    

    dann geht.

    for(int i=0; i<ArraySize(c); i++) {
    


  • Danke 😃



  • aber achtung! das geht nur mit echten Arrays.

    void foo(int *ptr)
    {
        printf("sizeof(ptr) = %d\n", sizeof(ptr));
    }
    
    void bar(void)
    {
        int arr[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
    
        printf("sizeof(arr) = %d\n", sizeof(arr));
        foo(arr);
    }
    

    Die Ausgabe wäre (auf einem x86 Rechner)

    sizeof(arr) = 40
    sizeof(ptr) = 4
    

    Wenn du diesen Java Code in C umsetzten willst, würde ich eher strlen verwenden, denn das liefert zuverlässig (sofern es sich um ein \0-terminierendes String) die Länge der Zeichenkette.


Anmelden zum Antworten