Maison  >  Article  >  développement back-end  >  Pourquoi la concaténation de littéraux de chaîne et de caractères en C provoque-t-elle un comportement indéfini ?

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

DDD
DDDoriginal
2024-10-25 05:37:29188parcourir

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>

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>

Alternativement, nous pouvons utiliser la concaténation :

<code class="cpp">string str = "ab";
str += 'c';</code>

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>

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!

Déclaration:
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