Die Größe von Arrays erst bei Initialisierung festlegen?
-
Hallo Forum,
ich beginne gerade erst damit mich in die Sprache C einzuarbeiten.
Ich bin nun durch Zufall darauf gestoßen, dass die Größe von Arrays bereits dem Compiler bekannt sein muss.Folgender Code lässt sich aber übersetzen und scheint auch problemlos zu funktionieren:
#include <stdio.h> int main(void) { int count; int i; printf("Array-Test\n"); printf("Bitte gib die Größe des Arrays an: "); scanf("%d", &i); printf("\n"); int array[i]; for (count = 0; count < sizeof(array)/sizeof(array[0]); count++) { array[count] = count - 400; printf("Setze Array-Element: %d\n", count); } for (count = 0; count < sizeof(array)/sizeof(array[0]); count++) { printf("Element an Stelle %d hat den Wert %d\n", count, array[count]); } }
Die Ausgabe lautet:
Array-Test
Bitte gib die Größe des Arrays an: 10Setze Array-Element: 0
Setze Array-Element: 1
Setze Array-Element: 2
Setze Array-Element: 3
Setze Array-Element: 4
Setze Array-Element: 5
Setze Array-Element: 6
Setze Array-Element: 7
Setze Array-Element: 8
Setze Array-Element: 9
Element an Stelle 0 hat den Wert -400
Element an Stelle 1 hat den Wert -399
Element an Stelle 2 hat den Wert -398
Element an Stelle 3 hat den Wert -397
Element an Stelle 4 hat den Wert -396
Element an Stelle 5 hat den Wert -395
Element an Stelle 6 hat den Wert -394
Element an Stelle 7 hat den Wert -393
Element an Stelle 8 hat den Wert -392
Element an Stelle 9 hat den Wert -391Verwenden tue ich den gcc 4.1.3.
Liegt es an diesem (neuen?) Compiler, dass sich an dieser Stelle die Größe des Arrays dynamisch setzen lässt?Vielen Dank für eure Hilfe.
Gruß
Sparrow
-
Ja. Neues C kann sowas. Die Vorgängerversion (C98 ???) erlaubte sowas noch nicht.
-
Ah, super!
Vielen Dank!
-
C89 ist der "Vorgänger".
-
feigling schrieb:
C89 ist der "Vorgänger".
Ah, Danke!
Ich war mir nicht sicher ob es K&R-C oder C89 hieß. Diese alte Version, bei der die Typen über der Argumentenliste im Funktionskopf standen, verwendet heute wohl keiner mehr.
-
welche datei-endung hat dein main programm ?
-
Die Datei heißt einfach test.c .
Übersetzt habe ich sie mit gcc -o test test.c.
-
ja, ok. häufig stellt man fest, das manche ihre dateien mit der endung *.cpp übersetzen, ohne zu wissen C++ features aktiviert zu haben. :p
-
Danke für den Hinweis.
Im Augenblick steht nur C bei mir auf dem Speiseplan um irgendwann mal an die hardwarenahe Programmierung zu kommen.Gruß
Sparrow
-
mit diesen vl-arrays musste aber vorsichtig sein, wegen stack-overflows. also nur benutzen, wenn du ganz sicher bist, dass eine bestimmte maximalgrösse nicht überschritten wird. das ist nicht so wie bei malloc, das eine 0 zurückgibt, wenn der speicher aufgebraucht wird.