Zuweisung an dynamisches char Array
-
@supertux
die fehlermeldung bleibt allerdings trotzdem:
"request for member `file' in something not a structure or union"
-
versuche als erstes
typedef struct tsource_tmp { char **file; ... }tSource;
-
fehler bleibt...
-
source[i] ist ein pointer auf tSource.
source[i]->file = ...
sollte keinen fehler produzieren
K.
-
Danke, das funktioniert.
nur, irgendwie verstehe ich das trotzdem nicht richtig, zwecks typedef -> struct -> char * oder char **
Soweit ich nun gelesen und verstanden habe, so hoff ich, habe ich mal ein kleines snipplet geschrieben. So, nun habe ich dort einen pointer auf einen char mit noch keinem Wert. Diesen Verpacke ich nun in eine struct und weise mit typedef an, daraus einen neuen Datentyp zu machen. Also erstelle ich eine neue Variable z.b namens "n_array" und greife mit dieser dann auf die einzelnen Werte mit dem "-> operator" in der struct zu, richtig?
#include <stdio.h> #include <stdlib.h> typedef struct ar { char *array; }tsArray; int main(int argc, char **argv) { tsArray *n_array; n_array->array = argv[1]; printf("Array content: %s\n", n_array->array); return 0; }
Nur warum läßt sich das obige code snipplet nicht ausführen, sondern endet mit einem segmentation fault? Was habe ich da nicht richtig gemacht? Bitte um hilfe bei dem Problem.
-
du musst mit
n_array = (tsArray*)malloc(sizeof(tsArray));
est mal speicher reservieren.
K.
-
ok, aber warum funktioniert ohne struct und ohne typdef
array = argv[1];
diese Zuweisung? Warum brauch ich dort kein malloc?
-
Tipp: Kauf dir ein gutes c Buch. oder schau dir zumindest ein tut über pointer
anmfg
-
in diesem fall weist du nur einem pointer (array ist ein pointer im stack )einen anderen pointer zu. du schreibst also auf eine variable die schon am stack reserviert ist.
im vorigen fall dereferenzierst du einen uninitialisierten pointer der irgendwohin zeigt.
K.
-
dank dir.