C: Größe des Feldes zur Laufzeit festlegen !

Ich möchte eine Reihe von int Werten einlesen, aber die Größe des Feldes erst zur Laufzeit festlegen.
z.B.
int i;
int *Feld;
scanf("%d",&i);
Feld = malloc(i*sizeof(int));
´da wollte ihc nur mal ausprobieren ob ich so ein feld von i int werten bekomme, das geht aber nicht ! wie geht es denn dann ???

ist wirklich dringend !

Danke
Lotte

´da wollte ihc nur mal ausprobieren ob
ich so ein feld von i int werten bekomme,
das geht aber nicht ! wie geht es denn
dann ???

Ich weiss ja nicht, was Du fuer einen Kompiler hast, aber bei mir geht das. Du musst beim malloc aber noch casten.

Ich weiss ja nicht, was Du fuer einen
Kompiler hast, aber bei mir geht das. Du
musst beim malloc aber noch casten.

casten:

feld=(int *)malloc(i*sizeof(int))

is ja nich so schwer noch n beispiel hinzuschreiben , oder ??

Casten musst du nur bei C++, bei C wird das automatisch gemacht!

cu Stefan.

Irrtum
Hallo Stefan

Casten musst du nur bei C++, bei C wird
das automatisch gemacht!

Bei der Standart-Einstellung des Compilers wird nicht automatisch „gecastet“ sondern es wird nicht überprüft was da zugewiesen wird. Das ist nicht das gleiche !!

Leider ist bei den meisten Compilern die Grund-Einstellung so gewählt, dass man die alten c-Programme übersetzen kann. Früher gab es ein separates Programm, namens LINT, welches dann die genaue Typenüberprüffung vornahm. Bei einem ANSY-C-Compiler ist dies eingebaut, muss aber meist erst aktiviert werden.

MfG Peter(TOO)

Nein, kein Irrtum!
Hi Peter :smile:

Bei der Standart-Einstellung des
Compilers wird nicht automatisch
„gecastet“ sondern es wird nicht
überprüft
was da zugewiesen wird. Das
ist nicht das gleiche !!

Doch!

Malloc liefert einen void-Zeiger. Bei einer Zuweisung an einen Typ-Zeiger, wird der void-Zeiger automatisch entsprechend des neuen Typs uminterpretiert. Das ist das gleiche wie eine automatische Typkoversion!

cu Stefan.

In c++ mach ich so; vielleicht geht es ja auch in C

int *feld;

feld=new int(anzahl);

und dann ganz normal wie ein aray behandeln

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

casten? Ha!:

dim l() as integer, i as integer
redim l(grenze)
for i=0 to grenze: l(i)=i*2: next

so einfach geht das in vb

und dann sieh Dir mal den Maschinencode dazu an! Könnte es sein, daß der C-Code geringfügig schneller läuft? (vernünftige Compiler vorausgesetzt)

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

und dann sieh Dir mal den Maschinencode
dazu an! Könnte es sein, daß der C-Code
geringfügig schneller läuft? (vernünftige
Compiler vorausgesetzt)

Natürlich. Aber heutzutage ist es wohl billiger sich einfach einen dickeren Rechner anzuschaffen, als einen entwickler zu bezahlen der sich mit solch unnötigen verwicklungen herumschlagen muß.
Ich habe wirklich nichts gegen C aber man muß die Sache mit der Typisierung nicht zu weit treiben.

cu, holli