Array von Strukturen initialisieren



  • Hallo Forum!

    Ich muss alle Elemente einer Struktur mit dem Wert Null initialisieren.
    Das Problem dabei ist, dass ein Array von Strukturen definiert wird.
    Also es sollen alle Elemente aller Strukturen auf Null initialisiert werden.

    Wie kann ich die am einfachsten machen, und wie kann ich dies nach der Initialisierung wiederholen?

    Vielen Dank für Eure Hilfe!



  • Hi

    mit ner schleife ?



  • ich glaub der Standard stellt da keine vernünftigen funktionen zur verfügung - also entweder selbst etwas hacken (z. B. kleines Assemblermodul bauen das eine ZeroMemory Funktion bereit stellt)

    oder einfach paar Hand:

    ZeroStruktur(struct Struktur *tmp);
    ZeroArrayOfStruktur(struct *ArrayOfStruktur Array, unsinged int numOfElements);

    Die Anzahl der Element kann man vielleicht auch irgendwie mit sizeof Berechnen



  • Hmm... wenn es da keine Standardfunktion gibt muss ich es halt selber basteln.

    Danke für euere Infos.



  • Vertexwahn schrieb:

    ich glaub der Standard stellt da keine vernünftigen funktionen zur verfügung

    Ähmmm...

    #include <string.h>
    ...
    memset(structArray, 0, sizeof(structArray));
    

    Also wenn das keine vernünftige Funktion ist weiss ich auch nicht...



  • war memset nicht nur für char gedacht?



  • Vertexwahn schrieb:

    war memset nicht nur für char gedacht?

    memset() ist dafür gedacht, einen Speicherbereich mit einem konstanten Byte zu überschreiben. Wir wollen den Speicher unseres Arrays von Strukturen nullen. memset() interessiert es nicht die Bohne was für Variablen evtl. in diesem Speicherbereich liegen. Es wird alles plattgemacht...



  • Katze schrieb:

    Also es sollen alle Elemente aller Strukturen auf Null initialisiert werden.

    Das ist relativ einfach.
    Für automatischen Speicher

    struktur foo[anzahl] = {};
    

    Für static Speicher reicht sogar

    struktur foo[anzahl];
    

    Katze schrieb:

    und wie kann ich dies nach der Initialisierung wiederholen?

    Das ist dann nicht mehr ganz so einfach. Wie TactX schon sagte, kannst du memset benutzen. Nur ist das kein vollwertiger Ersatz, da alle Bytes auf (char) 0 gesetzt werden. Dies ist aber kein portables Nullen, da zB ein Nullzeiger auf Bitebene nicht unbedingt aus lauter Nullen bestehen muss. Unter Windows zB ist dies aber glücklicherweise der Fall.
    Du kannst dir aber auch eine eigene Funktion fürs Nullen basteln, zB

    void strukturen_nullen(struktur* s, size_t n)
    {
        struktur tmp = {};
        for (size_t i = 0; i != n; ++i)
            s[i] = tmp;
    }
    

Anmelden zum Antworten