Maison  >  Article  >  développement back-end  >  ## Pourquoi la concaténation d'un littéral de chaîne et d'un littéral de caractère en C conduit-elle à des résultats inattendus ?

## Pourquoi la concaténation d'un littéral de chaîne et d'un littéral de caractère en C conduit-elle à des résultats inattendus ?

Linda Hamilton
Linda Hamiltonoriginal
2024-10-25 07:56:29439parcourir

## Why Does Concatenating a String Literal and a Character Literal in C   Lead to Unexpected Results?

Énigme : Enigme de la concaténation de chaînes et de caractères en C

Lors de la tentative de concaténation d'un littéral de chaîne avec un littéral de caractère en C, un comportement inattendu peut survenir. Considérez le code suivant :

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

Fait intéressant, cette ligne donne la sortie "abc". Pour percer ce mystère, il est crucial de comprendre les opérations sous-jacentes.

Sous le capot, le compilateur interprète la chaîne littérale « ab » comme une chaîne de style C et le caractère littéral « c » comme une valeur entière. Étant donné que la concaténation de chaînes n'est pas définie pour ces types, le compilateur ajoute la valeur entière « c » à l'adresse de la chaîne littérale.

Cette manipulation peut conduire à des résultats imprévisibles, car la mémoire allouée à la chaîne est dépassée. . Par conséquent, le programme peut imprimer des caractères à partir de l'adresse résultante jusqu'à rencontrer un caractère nul.

Pour résoudre ce problème, plusieurs approches peuvent être adoptées. Tout d'abord, vous pouvez explicitement convertir le caractère littéral en chaîne à l'aide d'un transtypage :

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

Vous pouvez également utiliser l'opérateur de concaténation de chaîne, qui effectue la concaténation intuitive :

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

Dans le second cas, la méthode d'opérateur surchargée de la classe chaîne est utilisée pour une concaténation transparente.

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