11. oktober 2005 - 20:45
Der er
14 kommentarer og 1 løsning
Variabel størrelse på et globalt array?
Er det ikke muligt i C at specificere størrelsen på et globalt array når main køres? tænkte på noget i stil med: int z; int a[z]; int main() { printf("Enter the size of array a: "); c = getchar(); z = c; return 1; } Dette virker ikke, men er der en anden måde at gøre det på??
Annonceindlæg fra NetNordic
11. oktober 2005 - 20:51
#1
jo #include <stdio.h> #include <stdlib.h> #include <string.h> int *a; int main() { int z; /* indlæs z */ a = (int *)malloc(z*sizeof(int)); /* brug a */ free(a); return 1; }
11. oktober 2005 - 20:51
#2
c = getchar(); z = c; giver iøvrigt 41 hvis du taster '1'
11. oktober 2005 - 21:17
#3
Ok men det er kun muligt hvis man anvender pointers og malloc??
11. oktober 2005 - 21:19
#4
ja
11. oktober 2005 - 21:30
#5
men jeg kan stadig ikke få det til at du: int *d; struct test { int a; int b; }; struct test array[d]; int main() { int o; int c; c = getchar(); o = c; d = (int *)malloc(o*sizeof(int)); free(d); return 1; } Det er jo som sagt størrelsen på et array jeg vil sætte udfra hvad brugeren indtaster.
11. oktober 2005 - 21:33
#6
mener du: struct test { int a; int b; }; struct test *array; og array = (array *)malloc(o * sizeof(struct test)); ... free(array); eller ??
11. oktober 2005 - 21:42
#7
det er måske det jeg mener. Men jeg troede bare man kunne lave et "normalt" array globalt: struct test array[d]; Hvor man på en eller lader brugeren angive d når main køres vha. getchar(). Men det er måske kun muligt at lave det som et: "struct test *;" i stedet for "struct test array[d];" ?
11. oktober 2005 - 21:46
#8
pladsen til globale variable skal afsættes på compile tidspunkt
11. oktober 2005 - 21:46
#9
en compiler som ikke bekymrer sig om størrelsen på EXE vil faktisk allokere pladsen i EXE filen (men jeg tror de fleste bare gemmer oplysninger om at her skal der afsættes 2000 bytes)
11. oktober 2005 - 21:50
#10
Det forstod jeg ikke meget af. Men jeg går udfra at det er umuigt på den måde som jeg troede det skulle kunne lade sig gøre. Iøvrigt mente du ikke: array = (struct test *)malloc(o * sizeof(struct test)); i stedet for: array = (array *)malloc(o * sizeof(struct test)); Det sidste her giver i hvert fald en fejl.
11. oktober 2005 - 21:52
#11
jo det var en oopser
11. oktober 2005 - 21:55
#12
ok, det er vel en god ide at vente med at kalde "free" hvis jeg ønkser at bruge denne pointer i nogle forskellige funktioner før programmet skal terminerer?
11. oktober 2005 - 21:57
#13
ja meget efter free genbruges pladsen til andre variable !
11. oktober 2005 - 22:00
#14
du skal have tak for hjælpen. bare lig et svar
11. oktober 2005 - 22:02
#15
svar
Kurser inden for grundlæggende programmering