Deklaration Liste von Strings

Gast #4332719
Lesenswert?

Hallo Leute !

Ich möchte eine Stringlist deklarieren, etwa so:

typedef struct
{
  uint8_t anzahl;
  char *s[];
} tl;

const tl = {3,"murks","mehrmurks","nochmehrmurks"};

Die Anzahl der Strings soll variabel sein. Im Printzip geht
das auch so, man bekommt nur einen Sack voll Warnungen, weil
zuviel Initializer Elemente vorhanden sind. Was ja auch stimmt.

Nur wie deklariert man so etwas?

MfG
Edgar
#4332757
Lesenswert?

Warum benötigst du dazu einen eigenen Typ? Nimm ein Array aus Zeigern 
und setze den letzten Zeiger auf NULL. So kann man den letzten Eintrag 
sehr einfach erkennen und es ist keine zusätzliche Anzahl-Variable 
vorhanden, die einen falschen Wert haben kann.
1
const char * const List[] = {
2
  "Hello world!",
3
  "Text",
4
  NULL
5
};
#4338010
Lesenswert?

Yalu X. schrieb:
> Man sollte aber beachten, dass die Initialisierung von Flexible Array
> Members eine Erweiterung des GCC gegenüber dem C-Standard ist. Bei
> anderen Compilern ist das evtl. ein Fehler.

Korrekt, hab das nochmals nachgelesen. In meiner Variante habe ich einen 
Zeiger auf einen Zeiger verwendet, weil ich die flexiblen Arrays so oder 
so nicht mag. Ein Konstrukt, das nur ein flexibles Array zulässt, ist 
für mich unbrauchbar. Was wenn ich mehrere benötigte? Dann lieber einen 
Zeiger, auch wenn es nur ein Array ist. So ist es wenigstens immer 
gleich.

PS: Mit dem entsprechenden Compilerflag wird man vom GCC auch gewarnt:
1
warning: initialization of a flexible array member [-Wpedantic]

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