Ich brauche ein großes Null-Array in C als globales. Gibt es eine Möglichkeit, dies zu tun, außer zu tippen?
char ZEROARRAY[1024] = {0, 0, 0, /* ... 1021 more times... */ };
?
c
arrays
initialization
Claudiu
quelle
quelle
char
usw., aber wenn Sie ein Array von Zeigern möchten, sollten Sie diese explizit auf NULL setzen. Es gibt (absurderweise!) Keine Garantie dafür, dass NULL als Null-Bytes dargestellt wird. Dies, obwohl das Literal0
implizit den Nullzeiger darstellt.Antworten:
Globale und statische Variablen werden automatisch auf Null initialisiert. Wenn Sie einfach haben
Im globalen Bereich sind es zur Laufzeit alle Nullen. Tatsächlich gibt es jedoch eine Kurzsyntax, wenn Sie ein lokales Array hatten. Wenn ein Array teilweise initialisiert ist, erhalten Elemente, die nicht initialisiert wurden, den Wert 0 des entsprechenden Typs. Sie könnten schreiben:
Der Compiler würde die ungeschriebenen Einträge mit Nullen füllen. Alternativ können Sie
memset
das Array beim Programmstart initialisieren:Das wäre nützlich, wenn Sie es geändert hätten und es auf alle Nullen zurücksetzen wollten.
quelle
character
. es ist eininteger
.{}
Diskussion: stackoverflow.com/questions/17589533/…memset
ist offensichtlich nicht korrekt: Ich denke, es funktioniert nur für 0: stackoverflow.com/questions/11138188/…-Werror=missing-braces
in gcc verwendet wird, muss es mit initialisiert werden{{0}}
. Wenn das erste Strukturelement eine andere Struktur ist, dann{{{0}}}
und so weiter. Siehe stackoverflow.com/questions/5434865/…int arr[256]={1,2,7,{0}};
mich hierher gebracht hat. Ich wusste nicht einmal, dass dieses partielle Nullstellen eine Sache ist, bis ich es sah.Wenn Sie das Array mit anderen Werten als 0 initialisieren möchten, haben
gcc
Sie folgende Möglichkeiten:Dies ist eine GNU-Erweiterung von C99 Designated Initializers . In älteren GCC müssen Sie möglicherweise
-std=gnu99
Ihren Code kompilieren.quelle
...
zur Bezeichnung eines Bereichs ist eine gcc-spezifische Erweiterung.