Maison  >  Article  >  développement back-end  >  Lors de la concaténation de littéraux de chaîne avec \" \" en C, pourquoi ne peuvent-ils pas être directement joints ?

Lors de la concaténation de littéraux de chaîne avec \" \" en C, pourquoi ne peuvent-ils pas être directement joints ?

Susan Sarandon
Susan Sarandonoriginal
2024-10-24 08:45:02262parcourir

When Concatenating String Literals with

Concaténation de chaînes littérales

En Accelerated C , Koenig introduit la possibilité de concaténer des chaînes à l'aide de l'opérateur " ". Bien que cela fonctionne avec une combinaison de chaînes et de littéraux de chaîne, cela soulève des questions lorsque l'on tente de concaténer plusieurs littéraux de chaîne.

Comprendre le problème

Considérons l'exemple suivant :

const string hello = "Hello";
const string message = hello + ",world" + "!";

Ce code s'exécute avec succès, malgré la présence de ",world" et "!" sous forme de chaînes littérales. Cependant, une tentative similaire échoue avec ce qui suit :

const string exclam = "!";
const string message = "Hello" + ",world" + exclam;

Le facteur d'associativité

La différence réside dans l'associativité de l'opérateur " ". Il s'évalue de gauche à droite, ce qui signifie :

(hello + ",world") + "!"

Dans le premier cas, "hello" est concaténé avec ",world", ce qui donne un objet chaîne. Cet objet est ensuite concaténé avec "!".

Dans le second cas, "Hello" et ",world" ne peuvent pas être directement concaténés en raison de la restriction interdisant la concaténation de deux chaînes littérales. Cela entraîne une erreur du compilateur.

Solutions possibles

Pour résoudre le problème, on peut soit s'assurer que les deux premiers opérandes de " " sont des objets chaîne, soit forcer le ordre d'évaluation à l'aide de parenthèses :

Option 1 : Objet chaîne comme premier opérande

const string message = string("Hello") + ",world" + exclam;

Option 2 : Parenthèses

const string message = "Hello" + (",world" + exclam);

Pourquoi les littéraux de chaîne ne peuvent pas être concaténés directement

Les littéraux de chaîne sont des tableaux de caractères et, lorsqu'ils sont utilisés dans une expression, ils se convertissent en pointeurs vers leurs éléments initiaux. Tenter d'ajouter deux littéraux de chaîne équivaut à ajouter deux pointeurs, ce qui n'est pas valide.

Alternative pour concaténer des littéraux de chaîne

Les littéraux de chaîne peuvent être concaténés simplement en les plaçant adjacents les uns aux autres :

"Hello" ",world"

Cela équivaut à :

"Hello,world"

Cependant, cette approche ne fonctionne qu'avec des chaînes littérales et non avec des objets chaîne ou des tableaux de caractères.

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