Maison > développement back-end > C++ > le corps du texte

Pourquoi la concaténation de littéraux de chaîne et de caractères en C provoque-t-elle un comportement indéfini ?

DDD
Libérer: 2024-10-25 05:37:29
original
187 Les gens l'ont consulté

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

Concaténation de chaînes et de caractères en C

Lors de la concaténation de chaînes et de caractères en C , un comportement inattendu peut se produire. Pour comprendre cela, examinons l'exemple :

<code class="cpp">string str = "ab" + 'c';
cout << str << endl;</code>
Copier après la connexion

Ici, nous avons l'intention d'ajouter le caractère « c » à la chaîne « ab ». Cependant, le résultat est un comportement indéfini, conduisant à une sortie apparemment aléatoire.

Ce comportement provient de l'absence d'opérateur par défaut pour les littéraux de chaîne ("ab") et les littéraux de caractères ("c"). Au lieu de cela, le compilateur interprète « ab » comme une chaîne de style C et promeut « c » en int. L'int est ensuite ajouté à l'adresse de la chaîne littérale, ce qui entraîne l'accès à la mémoire en dehors de ses limites et l'impression de caractères inattendus jusqu'à ce qu'un caractère nul soit rencontré.

Pour éviter ce problème, nous pouvons explicitement convertir la chaîne littérale en une chaîne :

<code class="cpp">string str = std::string("ab") + 'c';</code>
Copier après la connexion

Alternativement, nous pouvons utiliser la concaténation :

<code class="cpp">string str = "ab";
str += 'c';</code>
Copier après la connexion

En revanche, le deuxième exemple avec "ab" étant une chaîne déjà créée fonctionne comme prévu :

<code class="cpp">char ch = 'c';
string str1 = "ab";
string str2 = str1 + ch;</code>
Copier après la connexion

Les classes de chaînes ont généralement un opérateur surchargé qui gère la concaténation de manière intuitive.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!