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... */ };
?
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... */ };
?
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
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
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örtlich0
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