Beim Versuch, String-Literale mit Zeichen-Literalen in C zu verketten, kann es zu unerwartetem Verhalten kommen. Zum Beispiel:
string str = "ab" 'c';
cout Dieser Code erzeugt eine unvorhersehbare Ausgabe, da der Operator „ “ nicht für die Kombination von Zeichenfolgenliteralen und Zeichenliteralen definiert ist. Stattdessen behandelt der Compiler das Zeichenfolgenliteral als Zeichenfolge im C-Stil (einen const char-Zeiger) und fügt den heraufgestuften int-Wert des Zeichenliterals zur Adresse des Zeichenfolgenliterals hinzu. Dies führt zu undefiniertem Verhalten.
Um dieses Problem zu vermeiden, konvertieren Sie das Zeichenliteral vor der Verkettung explizit in eine Zeichenfolge:
std::string str = std::string("ab") 'c';
Alternativ können Sie die Verkettung verwenden, um das gewünschte Ergebnis zu erzielen:
std::string str = "ab";
str = 'c';
Im zweiten Codeausschnitt verfügt das String-Objekt über einen überladenen „ “-Operator, der die beabsichtigte Verkettung durchführt.
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