Initialisiere / setze struct auf null / null zurück
struct x {
char a[10];
char b[20];
int i;
char *c;
char *d[10];
};
Ich bin das ausfüllen dieses struct und dann mit den Werten. Auf der nächsten iteration will ich zurücksetzen, um alle Felder zu 0
oder null
bevor ich die wiederverwenden.
Wie kann ich das tun? Kann ich memset
oder ich habe zu gehen durch alle Mitglieder, und dann tun Sie es individuell?
InformationsquelleAutor der Frage hari | 2011-07-31
Du musst angemeldet sein, um einen Kommentar abzugeben.
Definieren const statische Instanz der Struktur struct mit den ersten Werten und dann weisen Sie einfach diesen Wert in die variable, wenn Sie wollen, um es zurückzusetzen.
Beispiel:
Hier bin ich angewiesen auf statische Initialisierung meinen anfänglichen Werten, aber man könnte ein struct-Initialisierung-wenn Sie möchten, verschiedene Anfangswerte.
Dann jedes mal um die Schleife, die Sie schreiben können:
InformationsquelleAutor der Antwort David Heffernan
Den Weg, um so etwas zu tun, wenn Sie moderne C (C99) ist die Verwendung eines compound literal.
Dies ist etwas ähnlich wie David die Lösung, nur, dass Sie nicht haben, um sorgen zu erklären, die leere Struktur oder ob es zu erklären
static
. Wenn Sie dieconst
wie ich es Tat, der compiler ist frei, reservieren Sie das zusammengesetzte literal statisch im nur-lese-Speicher, wenn angemessen.InformationsquelleAutor der Antwort Jens Gustedt
Besser als alle oben ist immer die Verwendung von Standard-C-Spezifikation für struct-Initialisierung:
Hier sind alle bits null (nie).
InformationsquelleAutor der Antwort user411313
In C, es ist ein gemeinsames idiom zu null der Speicher für eine
struct
mitmemset
:Technisch gesehen, ich glaube nicht, dass es ist tragbar, weil er meint, dass die
NULL
Zeiger auf eine Maschine wird vertreten durch den integer-Wert 0, aber es ist weit verbreitet, weil auf den meisten Maschinen der Fall ist.Wenn Sie verschieben von C zu C++, seien Sie vorsichtig, nicht zu verwenden, diese Technik auf jedes Objekt. C++ macht nur diese legal auf Objekte mit nicht-member-Funktionen und keine Vererbung.
InformationsquelleAutor der Antwort templatetypedef
Wenn Sie einen C99-kompatible compiler verwenden, können Sie
sonst sollten Sie tun, was David Heffernan schrieb, D. H. zu erklären:
Und in der Schleife:
InformationsquelleAutor der Antwort Rudy Velthuis
Können Sie
memset
mit der Größe der Struktur:InformationsquelleAutor der Antwort Diego Sevilla
Ich glaube, Sie können geben Sie einfach die leere Menge (
{}
) Ihrer Variablen.InformationsquelleAutor der Antwort Archmede
InformationsquelleAutor der Antwort Josh Matthews