struct, alle auf NULL setzen ?

german

Aktives Mitglied
devCommunity-Experte
Kommt darauf an, zu welchem Zeitpunkt.

Initialisieren:
struct MyStructure obj = { 0 };

Oder später "zurücksetzen":
memset(&obj, 0, sizeof(struct MyStructure));
 

german

Aktives Mitglied
devCommunity-Experte
Vielleicht noch ...
Wenn in der Struktur allokierte Pointer sind, hängst du die zwar mit dem Setzen auf NULL ab, freigegeben sind die aber so noch nicht. Das müsstest du vorher individuell erledigt haben.
Und wenn du tatsächlich ein Objekt im Nachgang ausnullen musst, deutet das oft auf ein Designproblem hin.
Beispiel. Statt zusätzlich Komplexität durch den memset Aufruf zu erzeugen ...
C:
struct MyStructure obj = { 0 };
while (a == b)
{
  // igendwas
  memset(&obj, 0, sizeof(struct MyStructure));
}
… eher so, dass das Scope des Objekts es erlaubt jeweils initialisiert verwendet zu werden ...
C:
while (a == b)
{
  struct MyStructure obj = { 0 };
  // igendwas
}
 

lano

Mitglied
Ich hab jetzt ne funktion was einfach nen leeres struct zurück gibt. Das scheint soweit ganz gut zu klappen.
Pointer hab ich nicht drin. Kennst mich doch, mach ich nen großen bogen drum.
 

lano

Mitglied
Ich hab das Fachmännisch so: :LOL:
C:
struct config getCleanConf() {
    struct config conf = {
        .Id = 0,
        .Type = "",
        .fb_name ="",
        .fb_hw = "",
        .fb_major = 0,
        .fb_minor = 0,
        .fb_patch = 0,
        .fb_build = 0,
        .fb_type = "",
        .fb_serial = "",
        .fb_oem = "",
        .fb_lang = "",
        .fb_country = "",
        .fb_annex = "",
        .fb_flags = "",
        .fb_updateconfig = 0,
        .fb_provider = "",
        .fb_provider_name = "",
        .update_url = "",
        .update_info_url = "",
    };
return conf;
}
Für den Fall das ich doch nicht alles auf null setzen will.
 

german

Aktives Mitglied
devCommunity-Experte
Nee. So wie ich deine Struktur in Erinnerung habe, sind alle deine Member die du aktuell mit "" initialisierst keine Pointer sondern Arrays. Also, ohne Faxen, ein
struct config conf = { 0 };
ist alles was du brauchst. Alle Member werden komplett ausgenullt. Auch die char Arrays. Und wenn bereits da das erste Zeichen im char Array die Nullterminierung ist, dann ist das ein String der Länge Null, aka "".
Ich glaube du verstehst jetzt warum eine gesonderte Funktion zu dem Zweck unsinnig ist. Der Funktionsaufruf im Code wird genauso lang wie die eigentliche Initialisierung.
 
Zuletzt bearbeitet:

lano

Mitglied
sind alle deine Member die du aktuell mit "" initialisierst keine Pointer sondern Arrays
Is richtig.

Alle Member werden komplett ausgenullt.
Ja und bei Typ kommt mir das ungelegen. Ich arbeite noch dran. Ich hoffe ich kanns weglassen und ich kann die Auswahl des Typs automatisch bestimmen.

Der Funktionsaufruf im Code wird genauso lang wie die eigentliche Initialisierung.
Ja, alles nen Argument. Ich guck mir das nochmal an wenn ich nen bisschen aufgeräumt hab.
 
Oben Unten