„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > Warum ist die String-Verkettung mit + bei String-Literalen fehlgeschlagen?

Warum ist die String-Verkettung mit + bei String-Literalen fehlgeschlagen?

Veröffentlicht am 05.11.2024
Durchsuche:904

Why Did String Concatenation Using   Fail with String Literals?

String-Literale mit Strings verketten

In C kann der Operator zum Verketten von Strings und String-Literalen verwendet werden. Es gibt jedoch Einschränkungen dieser Funktionalität, die zu Verwirrung führen können.

In der Frage versucht der Autor, die Zeichenfolgenliterale „Hello“, „,world“ und „!“ zu verketten. auf zwei verschiedene Arten. Das erste Beispiel:

const string hello = "Hello";
const string message = hello   ",world"   "!";

In diesem Fall wird der Code erfolgreich kompiliert und ausgeführt. Dies liegt daran, dass der erste Operand des Operators ein String-Objekt (Hallo) ist, sodass der Compiler dies als eine Verkettung eines Strings und zweier String-Literale behandelt.

Das zweite Beispiel jedoch:

const string exclam = "!";
const string message = "Hello"   ",world"   exclam;

kompiliert nicht. Dies liegt daran, dass der Operator ganz links versucht, zwei Zeichenfolgenliterale zu verketten, was nicht zulässig ist. Der Compiler interpretiert diesen Code als:

const string message = (("Hello"   ",world")   exclam);

und die erste Verkettung versucht, zwei Zeiger hinzuzufügen ( const char*-Literale) zusammen.

Um dieses Problem zu beheben, sollte der Code entweder:

  • Eine der ersten beiden Zeichenfolgen, die verkettet werden, zu einem Zeichenfolgenobjekt machen:

    const string message = string("Hello")   ",world"   exclam;
  • Verwenden Sie Klammern, um zu erzwingen, dass die zweite zuerst ausgewertet wird:

    const string message = "Hello"   (",world"   exclam);

Der Grund, warum Sie zwei String-Literale nicht verketten können, liegt darin, dass String-Literale als gespeichert werden Arrays von Zeichen, die nicht direkt addiert werden können. Wenn Sie in den meisten Kontexten ein Zeichenfolgenliteral verwenden, wird es in einen Zeiger auf sein Anfangselement umgewandelt, das kein gültiger Operand für den Operator ist.

Daher ist es wichtig, sich daran zu erinnern, dass nur einer der beiden ganz linken Operanden in einem Verkettungsausdruck kann ein String-Literal sein. String-Literale können jedoch verkettet werden, indem man sie nebeneinander platziert, wie in:

"Hello" ",world"
"Hello,world"
Freigabeerklärung Dieser Artikel wird unter folgender Adresse abgedruckt: 1729729822 Bei Verstößen wenden Sie sich bitte an [email protected], um ihn zu löschen
Neuestes Tutorial Mehr>

Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.

Copyright© 2022 湘ICP备2022001581号-3