Wie initialisiert man ein Array in C auf 0?

Lesezeit: 2 Minuten

Claudius Benutzeravatar
Claudius

Ich brauche ein großes Null-Array in C als global. Gibt es eine andere Möglichkeit, dies zu tun, als zu tippen

char ZEROARRAY[1024] = {0, 0, 0, /* ... 1021 more times... */ };

?

  • Zeichen ZEROARRAY[1024] = {0};

    Benutzer1831086

    7. April 2010 um 3:18 Uhr

  • Wenn Sie jemals Speicher auf dem Heap zuweisen müssen, können Sie auch calloc() verwenden. Zum Beispiel char *zeroarray = calloc(1024, sizoef(*zeroarray)); .

    – Andrej Ciobanu

    7. April 2010 um 8:10 Uhr

  • NB calloc ist in Ordnung für char usw., aber wenn Sie ein Array von Zeigern wollen, sollten Sie sie explizit auf NULL setzen, es gibt (absurd!) keine Garantie dafür, dass NULL als Null-Bytes dargestellt wird. Dies obwohl das wörtlich 0 stellt implizit den Nullzeiger dar.

    – Adrian Ratnapala

    3. April 2015 um 17:11 Uhr

  • Mögliches Duplikat von So initialisieren Sie ein Array in C

    – AechoLiu

    21. Oktober 2015 um 6:19 Uhr

Benutzeravatar von John Kugelman
John Kugelmann

Globale Variablen und statische Variablen werden automatisch auf Null initialisiert. Wenn Sie einfach haben

char ZEROARRAY[1024];

im globalen Bereich sind es zur Laufzeit nur Nullen. Aber eigentlich da ist eine Kurzsyntax, wenn Sie ein lokales Array hatten. Wenn ein Array teilweise initialisiert ist, erhalten nicht initialisierte Elemente den Wert 0 des entsprechenden Typs. Du könntest schreiben:

char ZEROARRAY[1024] = {0};

Der Compiler würde die ungeschriebenen Einträge mit Nullen auffüllen. Alternativ könnten Sie verwenden memset So initialisieren Sie das Array beim Programmstart:

memset(ZEROARRAY, 0, 1024);

Das wäre nützlich, wenn Sie es geändert haben und es auf Null zurücksetzen möchten.

  • {0}; funktioniert gut, C99 [$6.7.8/21] Wenn es weniger Initialisierer in einer in geschweiften Klammern eingeschlossenen Liste gibt als Elemente oder Mitglieder eines Aggregats oder weniger Zeichen in einem Zeichenfolgenliteral, das zum Initialisieren eines Arrays bekannter Größe verwendet wird, als Elemente im Array vorhanden sind, muss der Rest des Aggregats implizit genauso initialisiert werden wie Objekte mit statischer Speicherdauer

    – Саша Зезюлинский

    25. Januar 2016 um 11:10 Uhr

  • Bitte beachten Sie: Die initialisierte 0 ist kein a character. es ist ein integer.

    – Yonggoo Noh

    4. Mai 2016 um 4:43 Uhr


  • {} Diskussion: stackoverflow.com/questions/17589533/… memset ist offensichtlich nicht richtig: Ich denke, es funktioniert nur für 0: stackoverflow.com/questions/11138188/…

    – Ciro Santilli OurBigBook.com

    10. Mai 2016 um 18:54 Uhr

  • Wenn es sich um ein Array von Strukturen handelt, und using -Werror=missing-braces in gcc muss es initialisiert werden {{0}}. Wenn das erste Strukturelement eine andere Struktur ist, dann{{{0}}} usw. Siehe stackoverflow.com/questions/5434865/…

    – Tor Klingeberg

    25. August 2017 um 15:41 Uhr


  • Heute bin ich auf das seltsame gestoßen … int arr[256]={1,2,7,{0}}; … was mich hierher geführt hat. Ich wusste nicht einmal, dass dieses partielle Nullen eine Sache ist, bis ich es sah.

    – Neil Gatenby

    11. Juli 2019 um 8:26 Uhr

Benutzeravatar von Deqing
Deqing

Wenn Sie das Array mit anderen Werten als 0 initialisieren möchten, verwenden Sie with gcc du kannst tun:

int array[1024] = { [ 0 ... 1023 ] = -1 };

Dies ist eine GNU-Erweiterung von C99 Ausgewiesene Initialisierer. In älteren GCC müssen Sie möglicherweise verwenden -std=gnu99 um Ihren Code zu kompilieren.

  • Ausgewiesene Initialisierer sind Standard in C99. Die Verwendung von ... einen Bereich zu bezeichnen ist eine gcc-spezifische Erweiterung.

    – Keith Thompson

    8. August 2013 um 15:02 Uhr

1426120cookie-checkWie initialisiert man ein Array in C auf 0?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy