Länge eines Arrays
-
Gibt es in C einen Befehl bzw. eine Funktion, die die Länge eines Arrays ermittelt?
Etwas ähnliches wie das:char[] c = {'a','b','c'}; int i = c.length; System.out.println(i); // Ausgabe: 3
-
Wenn es ein statisches Array ist, dann so:
int arr[20]; int arr_len = sizeof(arr) / sizeof(arr[0]);
-
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.