Es hat nichts mit der Größe zu tun. Sie können einem char-Array nach seiner Erstellung kein Zeichenfolgenliteral zuweisen - Sie können es nur zum Zeitpunkt der Definition verwenden.
Wenn Sie
tun %Vor%es erstellt ein Array mit ausreichender Größe (einschließlich der abschließenden Null) und kopiert die Zeichenfolge in das Array. Es empfiehlt sich nicht, die Array-Größe anzugeben, wenn Sie sie mit einem Zeichenfolgenliteral initialisieren - Sie könnten das Nullzeichen nicht berücksichtigen.
Wenn Sie
tun %Vor%Sie versuchen, der Adresse des Arrays zuzuweisen, was illegal ist.
EDIT: wie in anderen Antworten erwähnt, können Sie eine strcpy / strncpy tun, aber stellen Sie sicher, dass das Array mit der erforderlichen Länge initialisiert ist.
%Vor%Sie können Arrays niemals nach ihrer Erstellung zuweisen. das ist ebenso illegal:
%Vor%Sie müssen Zeiger verwenden oder einem Index des Arrays zuweisen; Das ist legal:
%Vor% Wenn Sie ein Array in der Struktur hinterlassen wollen, können Sie eine Funktion wie strcpy
:
(Beachten Sie, dass das char-Array groß genug sein muss, um auch den Null-Terminator zu enthalten, also wollen Sie es wahrscheinlich char a[7]
machen und das letzte Argument in strncpy
auf 7 setzen)
Arrays sind non modifiable lvalues
. Sie können ihnen also nicht zuweisen. Die linke Seite des Zuweisungsoperators muss ein modifiable lvalue
sein.
Sie können jedoch ein Array initialisieren, wenn es definiert ist.
Zum Beispiel:
%Vor% Sie können jedoch strncpy
(a, "Hello World",20);
Wie andere Antworten bereits gezeigt haben, können Sie ein Zeichen-Array nur mit einem String-Literal initialisieren, Sie können einem Zeichen-Array kein String-Literal zuweisen. Strukturen (auch solche, die Zeichen-Arrays enthalten) sind jedoch ein weiterer Kessel Fisch.
Ich würde nicht empfehlen, dies in einem tatsächlichen Programm zu tun, aber dies zeigt, dass Arrays zwar Arrays zugewiesen werden können, aber Strukturen, die Array-Typen enthalten.
%Vor%In Ihrem ursprünglichen Beispiel sollte der folgende Code also in Ordnung sein:
%Vor%Es wird kein strcpy oder C99 compund literal benötigt. Das Beispiel in reinem ANSI C:
%Vor%Tags und Links c