Versionen dieses Beitrags

c binary mode für stdin

Thepoeppel crop Rolf B
  • c binary mode für stdin
  • Moin pl,
  • ich habe ein paar Fragen zu deinem Code:
  • > Der Trick besteht darin beim Einlesen der Parameterliste die Längenangabe mitzunehmen, das sieht dann so aus:
  • >
  • > ~~~c
  • > /* Speicher anfordern, Längenangaben liegen vor */
  • > new->name = (char*)malloc(alen+1);
  • > new->value = (char*)malloc(vlen+1);
  • > ~~~
  • Wenn ich mit die Definition der `struct` unten anschaue, dann wäre es doch sinnvoll, deren Attribute `alen` und `vlen` zu nutzen und nicht (globale?) Variablen, also
  • ~~~c
  • new->vlen = vlen;
  • new->alen = alen;
  • new->name = (char*)malloc(new->alen+1);
  • new->value = (char*)malloc(new->vlen+1);
  • ~~~
  • Zudem beachte, dass eine Variable mit dem Namen `new` nicht zu C++ kompatibel ist, da `new` dort ein reserviertes Wort ist.
  • Und du kannst hier noch etwas „Platz sparen“, indem du die `struct` direkt als Typ definierst:
  • > ~~~c
  • > typedef struct {
  • > size_t vlen;
  • > size_t alen;
  • > char *name;
  • > char *value;
  • > PARAM *next;
  • > } PARAM;
  • > ~~~
  • Ich habe zudem `unsigned int` durch `size_t` ersetzt, denn `size_t` ist groß genug um die Speichermenge für `malloc` zu enthalten. Auf einem 64-Bit-System ist
  • ~~~c
  • sizeof(unsigned int) < sizeof(size_t)
  • /* 4 Bit 8 Bit */
  • /* 4 Byte 8 Byte */
  • ~~~
  • während auf einem 32-Bit-System
  • ~~~c
  • sizeof(unsigned int) == sizeof(size_t)
  • /* 4 Bit 4 Bit */
  • /* 4 Byte 4 Byte */
  • ~~~
  • *(Edit Rolf B: Bit -> Byte)*
  • Viele Grüße
  • Robert