Die C++ Art und Weise, dies zu tun, wie ich oben bemerkte, wären std::string
zu verwenden, anstatt char[]
. Das gibt Ihnen das Zuordnungsverhalten, das Sie erwarten.
Das heißt, der Grund, warum Sie nur einen Fehler für den zweiten Fall bekommen ist, dass die =
in diesen beiden Linien verschiedene Dinge bedeuten:
char a[10] = "Hi";
a = "Hi";
Die erste ist eine Initialisierung, die zweite eine Zuordnung .
Die erste Zeile weist genügend Platz auf dem Stapel für 10 Zeichen zu und initialisiert die ersten drei Zeichen als 'H', 'i' und '\ 0'. Von diesem Punkt an beziehen sich alle a
auf die Position des Arrays auf dem Stapel. Da das Array nur ein Platz auf dem Stack ist, darf a
niemals geändert werden. Wenn Sie möchten, dass eine andere Position auf dem Stapel einen anderen Wert enthält, benötigen Sie eine andere Variable.
Die zweite (ungültige) Zeile versucht dagegen, a
zu ändern, um auf eine (technisch unterschiedliche) Beschwörung von "Hi"
zu verweisen. Das ist aus den oben genannten Gründen nicht erlaubt. Sobald Sie ein initialisiertes Array haben, können Sie nur Werte daraus lesen und Werte darin schreiben. Sie können den Standort oder die Größe nicht ändern. Das würde eine Aufgabe in diesem Fall versuchen.
Für Antworten zu schreiben: Da diese C++ markiert ist, sind gibt es eine * non * -strcpy "mehr C++" Möglichkeit, dies zu tun, während Sie mit 'char []' umgehen? –
Ein "mehr C++ Weg" wäre String oder Vektor anstelle von char [] zu verwenden. Indem du char [] benutzt, akzeptierst du grundsätzlich alle C-ness, die damit einhergehen. –
Cogwheel
danke für deine Antwort Jungs. –