Heim > Backend-Entwicklung > C++ > Hauptteil

Warum führt die Verkettung von String-Literalen und -Zeichen in C zu undefiniertem Verhalten?

DDD
Freigeben: 2024-10-25 05:37:29
Original
188 Leute haben es durchsucht

Why Does Concatenating String Literals and Characters in C   Cause Undefined Behavior?

Verketten von Zeichenfolgen und Zeichen in C

Beim Verketten von Zeichenfolgen und Zeichen in C kann unerwartetes Verhalten auftreten. Um dies zu verstehen, schauen wir uns das Beispiel an:

<code class="cpp">string str = "ab" + 'c';
cout << str << endl;</code>
Nach dem Login kopieren

Hier wollen wir das Zeichen „c“ zur Zeichenfolge „ab“ hinzufügen. Das Ergebnis ist jedoch ein undefiniertes Verhalten, das zu einer scheinbar zufälligen Ausgabe führt.

Dieses Verhalten ist auf das Fehlen eines Standardoperators für Zeichenfolgenliterale („ab“) und Zeichenliterale („c“) zurückzuführen. Stattdessen interpretiert der Compiler „ab“ als Zeichenfolge im C-Stil und wandelt „c“ in einen int um. Das int wird dann zur Adresse des String-Literals hinzugefügt, was dazu führt, dass auf den Speicher außerhalb seiner Grenzen zugegriffen wird und unerwartete Zeichen ausgegeben werden, bis ein Nullzeichen gefunden wird.

Um dieses Problem zu vermeiden, können wir das String-Literal explizit in umwandeln eine Zeichenfolge:

<code class="cpp">string str = std::string("ab") + 'c';</code>
Nach dem Login kopieren

Alternativ können wir die Verkettung verwenden:

<code class="cpp">string str = "ab";
str += 'c';</code>
Nach dem Login kopieren

Im Gegensatz dazu funktioniert das zweite Beispiel, bei dem „ab“ eine bereits erstellte Zeichenfolge ist, wie erwartet:

<code class="cpp">char ch = 'c';
string str1 = "ab";
string str2 = str1 + ch;</code>
Nach dem Login kopieren

String-Klassen verfügen normalerweise über einen überladenen Operator, der die Verkettung intuitiv handhabt.

Das obige ist der detaillierte Inhalt vonWarum führt die Verkettung von String-Literalen und -Zeichen in C zu undefiniertem Verhalten?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!