Bearbeiten: OP (oder ein Editor) hat einige der einfachen Anführungszeichen in der ursprünglichen Frage stillschweigend in doppelte Anführungszeichen geändert, nachdem ich diese Antwort gegeben hatte.
Ihr Code führt zu Compilerfehlern. Ihr erstes Codefragment:
char buf[10] ; buf = ''
ist doppelt illegal. Erstens gibt es in C kein leeres char
. Sie können doppelte Anführungszeichen verwenden, um eine leere Zeichenfolge zu kennzeichnen, wie bei:
char* buf = "";
Das gibt Ihnen einen Zeiger auf einen NUL
String, dh eine Einzel Zeichenkette nur mit dem NUL
Charakter in ihm. Sie können jedoch keine einfachen Anführungszeichen verwenden, in denen sich nichts befindet - das ist undefiniert. Wenn Sie den NUL
Charakter bestimmen müssen, müssen Sie ihn angeben:
char buf = '\0';
Der Backslash ist notwendig, um vom Charakter zu unterscheiden '0'
.
char buf = 0;
erreicht das gleiche, aber das erstere ist ein bisschen weniger zweideutig zu lesen, denke ich.
Zweitens können Sie Arrays nicht initialisieren, nachdem sie definiert wurden.
char buf[10];
deklariert und definiert das Array. Die Array-ID buf
ist jetzt eine Adresse im Speicher, und Sie können buf
durch Zuweisung nicht ändern, wo Punkte liegen. So
buf = // anything on RHS
ist illegal. Ihre zweiten und dritten Codefragmente sind aus diesem Grund illegal.
Um ein Array zu initialisieren, müssen Sie dies zum Zeitpunkt der Definition tun:
char buf [10] = ' ';
Sie erhalten ein Array mit 10 Zeichen, wobei das erste Zeichen das Leerzeichen '\040'
und der Rest das Zeichen NUL
ist '\0'
. Wenn ein Array mit einem Initialisierer deklariert und definiert wird, werden die Array-Elemente (falls vorhanden), die über die Elemente mit den angegebenen Anfangswerten hinausgehen, automatisch aufgefüllt 0
. Es wird keinen "zufälligen Inhalt" geben.
Wenn Sie das Array deklarieren und definieren, es aber nicht wie folgt initialisieren:
char buf [10];
Sie werden zufälligen Inhalt in allen Elementen haben.