Archiv verlassen und diese Seite im Standarddesign anzeigen : [C]: Wie kann ich ein Array während der Laufzeit anlegen?
Hallo zusammen,
Ich will in C ein zweidimensionales Array anlegen. Allerdinngs wird die Größe der ersten Dimension erst zur Laufzeit des Scriptes bestimmt.
Nun habe ich sowas versucht:
int Zahl;
scanf("%d",&zahl);
char lol[Zahl][50];
Da scheitert der Compiler jedoch bei der Zeile 'char lol[Zahl][50];' mit der Meldung 'expected constant expression'.
Wie werde ich den Fehler los?
Geht das überhaupt, so ein Array dynamisch anlegen zu lassen?
Gruß,
mf_2
Das geht in der 1999 aktualisierten Version von C. Die Compilerunterstützung dafür ist aber ziemlich mau.
Im normalen C kann man nur mit malloc Arrays mit dynamischer Größe erzeugen und die bekommt man nicht als 2D Arrays angesprochen.
Es muß kein zweidimensionales Array sein. Mein Problem ist folgendes: Ich will mehrere Strings mit einer Maximallänge von 50 Zeichen in einer Variable speichern. Zur Not kann ich das ja auch mittels eines ASCII Trennzeichens in ein einziges Feld packen. Wie kann ich dann ein Feld der Größe Zahl*50 anlegen (via malloc)?
char* feld = malloc(50*zahl);
Zugreifen muss man dann so:
feld[i*50+j] anstatt feld[i][j]
und irgendwann auch free(feld) aufrufen, sonst hast du ein Speicherleck.
Da bekomme ich bei der Deklaration folgenden Fehler:
error C2440: 'initializing' : cannot convert from 'void *' to 'char *'
Conversion from 'void*' to pointer to non-'void' requires an explicit cast
Gissmo
2008-01-14, 22:40:06
Bin mir gerade nicht ganz sicher, aber probier vllt mal:
char* feld;
feld = malloc(50*zahl);
Das müsste, wenn ich mich nicht irre einen Pointer mit dem Namen "feld" auf einen "char" erstellen.
Und dann im nächsten Feld dem Pointer die Speicheradresse zuweisen die malloc zurückgiebt.
(sollte ich falsch liegen.. korrigiert mich bitte ;-))
Achso, man muss das noch casten:
char* feld = (char*) malloc(50*zahl);
rotalever
2008-01-14, 22:58:15
Außerdem würde ich
malloc (50*zahl*sizeof(char))
machen. Hier zwar unnötig aber durchaus sinnvoll..
Danke besonders an Trap, das scheint zu funzen! :)
rotalever
2008-01-14, 23:26:05
Es gibt dann auch noch realloc zum verändern...
vBulletin®, Copyright ©2000-2025, Jelsoft Enterprises Ltd.