struct mit char array initialisieren?

OP #2275627
Lesenswert?

Hallo,

ich wollte eine Datenstruktur erstellen, die ich als Datentyp definiere.
Diese Struktur enthält auch ein char array. Leider kann ich dieses char 
array nicht initialisieren?

typedef struct _time
{         /* deklariert den Datentyp time_t */
   int   second;
   int   minute;
   int   hour;
   int   day;
   int   week;
   char * month;
   int   year;
} time_t;

time_t time;

char maerz[5]= {'M',1,'r','z',0};


time.month[]= {"Januar", "Februar", maerz, "April",
                 "Mai", "Juni", "Juli", "August",
         "September", "Oktober", "November",
         "Dezember"};

Diese letzte Zuweisung ist nicht möglich?
Es gibt immer eine Meldung:

error: expected '=', ',', ';', 'asm' or '__attribute__' before '.' token


Wie geht denn das genau mit der Initialisierung eines solchen char 
array?
Gast #2275639
Lesenswert?

Olli R. schrieb:
> Wie geht denn das genau mit der Initialisierung eines solchen char
> array?

char * month;

dort kann man aber keine monate speichern, es ist nur 1 string oder 
array von einzelnen zeichen.

> time.month[]= {"Januar", "Februar", maerz, "April",
>                 "Mai", "Juni", "Juli", "August",
>         "September", "Oktober", "November",
>         "Dezember"};
das ganze ist eine zuweisung und keine Initialisierung.
Gast #2275651
Lesenswert?

Olli R. schrieb:
> Aber wie könnte man dieses Problem den lösen: also das Array mit den
> Strings der Monate in das Struct bringen?

was sollen sie da drin? du speicherst doch auch nicht mehrer wochen in 
week ab, warum sollen da mehere Monate rein - das ergibt doch überhaupt 
keinen sinn?
OP #2275656
Lesenswert?

Peter II schrieb:
> was sollen sie da drin? du speicherst doch auch nicht mehrer wochen in
> week ab, warum sollen da mehere Monate rein - das ergibt doch überhaupt
> keinen sinn?

Das hätte ich dann später noch gemacht. Mir geht es darum das alles in 
einer Datenstruktur zu haben, um die Variable dieses Typs ganz einfach 
den entsprechenden Funktionen zu übergeben!
Moderator Persönliche Seite #2275670
Lesenswert?

Olli R. schrieb:
> Aber wie könnte man dieses Problem den lösen: also das Array mit den
> Strings der Monate in das Struct bringen?

Ich verstehe den Sinn nicht. Selbst wenn es gehen würde, dann hättest Du 
in jeder Struct-Variablen eine Kopie der 12 String-Konstanten. Was soll 
das?

Wenn, dann müsste man das bei der Definition der Struct-Variablen 
machen:
1
time_t time = { ... };

Aber ich bin jetzt zu faul, das hier explizit aufzuschreiben - einfach, 
weil es unsinnig ist.

Abgesehen davon stimmt - wie bereits erwähnt - das
1
   char * month;

nicht. Da bekommst Du lediglich einen Pointer auf einen String, aber 
nicht 12 Stück von diesen rein.

Lass mal in der time_t-Struct schön das
1
   int month;              // 0 - 11

stehen, so wie das ursprünglich vor knapp 40 Jahren unter Unix erdacht 
wurde. Das hat schon seinen Sinn so.

Du kannst dann nämlich time.month als Index für ein Array
1
char * months[]= {"Januar", "Februar", maerz, "April",
2
                  "Mai", "Juni", "Juli", "August",
3
                  "September", "Oktober", "November",
4
                  "Dezember"};

nutzen, z.B.:
1
   time.month = 3;             // Index auf April
2
   months[time.month]          // ist "April

Gruß,

Frank

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren