C char-Array-Initialisierung
Ich bin mir nicht sicher, was in das char-array nach der Initialisierung in der folgenden Weise.
1.char buf[10] = "";
2. char buf[10] = " ";
3. char buf[10] = "a";
Fall 2, ich denke buf[0]
sollte ' '
buf[1]
sollte '\0'
und von buf[2]
zu buf[9]
wird ein zufälliger Inhalt. Für Fall 3, ich denke buf[0]
sollte 'a'
buf[1]
sollte '\0', und aus buf[2]
zu buf[9]
wird ein zufälliger Inhalt.
Ist das richtig?
Sowie für den Fall 1, was in der buf
? buf[0] == '\0'
und von buf[1]
zu buf[9]
wird ein zufälliger Inhalt?
InformationsquelleAutor der Frage lkkeepmoving | 2013-09-08
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dies ist nicht, wie Sie Sie initialisieren ein array, sondern für:
Die erste Erklärung:
entspricht
Die zweite Erklärung:
entspricht
Die Dritte Erklärung:
entspricht
Wie Sie sehen können, ohne random-Inhalt: wenn es weniger Initialisierungen, die restlichen von der array ist initialisiert mit
0
. Dies auch dann der Fall, wenn das array deklariert ist, innerhalb einer Funktion.InformationsquelleAutor der Antwort ouah
Edit: OP (oder ein Redakteur) leise einiges geändert, die einzigen Zitate in der ursprünglichen Frage zu double quotes irgendwann, nachdem ich diese Antwort.
Ihren code führt compiler-Fehler. Der erste code-fragment:
ist doppelt illegal. Zuerst in C -, es gibt keine solche Sache wie eine leere
char
. Sie können doppelte Anführungszeichen verwenden, so geben Sie eine leere Zeichenfolge, mit:Geben Sie einen Zeiger auf eine
NUL
string, D. H., ein einzelnes Zeichen string mit nur dieNUL
Charakter. Aber Sie können nicht verwenden Sie einfache Anführungszeichen mit nichts in Ihnen--, dass ist nicht definiert. Wenn Sie brauchen, um zu benennen, dieNUL
Charakter, Sie haben, um es zu spezifizieren:Der backslash ist notwendig, um keine Verwechslungen von Zeichen
'0'
.leistet das gleiche, aber die erstere ist ein bisschen weniger eindeutig zu Lesen, denke ich.
Zweitens, können Sie Sie nicht initialisieren arrays, nachdem Sie definiert wurden.
deklariert und definiert das array. Der array-Bezeichner
buf
ist jetzt eine Adresse im Speicher, und Sie können nicht ändern, wobuf
Punkte durch Abtretung an. Soist illegal. Ihre zweite und Dritte code-Fragmente sind illegal aus diesem Grund.
Um ein array zu initialisieren, müssen Sie es zum Zeitpunkt der definition:
wird Ihnen eine 10-Zeichen-array mit dem ersten char die Raum
'\040'
und der rest wirdNUL
d.h.,'\0'
. Wenn ein array deklariert und definiert mit einer Initialisierer, array-Elemente (wenn vorhanden) Vergangenheit, die mit den angegebenen Initialen Werte werden automatisch aufgefüllt, mit0
. Es gibt keine "random content".Wenn Sie deklarieren und definieren Sie das array aber nicht initialisieren, wie im folgenden:
haben Sie zufälliger Inhalt, in allen Elementen.
InformationsquelleAutor der Antwort verbose
Diese sind äquivalent
Diese sind äquivalent
Diese sind äquivalent
InformationsquelleAutor der Antwort Steven Penny
Dem relevanten Teil der C11-standard-Entwurf n1570 6.7.9 Initialisierung sagt:
und
So, das '\0' angehängt wird, wenn genug Platz vorhanden ist,und die restlichen Zeichen werden initialisiert mit dem Wert, den ein
static char c;
würde initialisiert werden innerhalb einer Funktion.Schließlich
So
char
wird ein arithmetischer Typ der Rest des Arrays ist auch gewährleistet werden, initialisiert mit Nullen.InformationsquelleAutor der Antwort Antti Haapala
Interessanterweise ist es möglich, zum initialisieren von arrays in irgendeiner Weise zu jeder Zeit in das Programm, vorausgesetzt, Sie sind Mitglieder einer
struct
oderunion
.Beispiel-Programm:
InformationsquelleAutor der Antwort user3381726
Ich bin mir nicht sicher, aber ich allgemein initialisieren Sie ein array auf ""
in diesem Fall ich don ' T Sorge über die null-das Ende des Strings.
InformationsquelleAutor der Antwort Erric Rapsing