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

Pouvez-vous concaténer deux littéraux de chaîne directement en C ?

Susan Sarandon
Libérer: 2024-10-24 08:48:29
original
360 Les gens l'ont consulté

Can You Concatenate Two String Literals Directly in C  ?

Concaténation de chaînes littérales

En C , vous pouvez concaténer des chaînes à l'aide de l'opérateur. Cependant, il existe certaines règles à suivre lors de la concaténation de chaînes littérales.

Validité des définitions de chaînes

Le code suivant définit deux variables de chaîne :

<code class="cpp">const string hello = "Hello";
const string message = hello + ",world" + "!";</code>
Copier après la connexion

Ce code est valide car l'une des deux chaînes concaténées est un objet std::string (bonjour). L'opérateur évaluera d'abord la concaténation de hello et ",world", ce qui donnera un objet std::string. Cet objet est ensuite concaténé avec "!".

Cependant, le code suivant n'est pas valide :

<code class="cpp">const string exclam = "!";
const string message = "Hello" + ",world" + exclam;</code>
Copier après la connexion

Ce code n'est pas valide car les deux chaînes concaténées à l'extrême gauche sont des chaînes littérales (" Bonjour" et ",monde"). L'opérateur ne peut pas être utilisé pour concaténer directement deux littéraux de chaîne.

Associativité de gauche à droite de l'opérateur

L'opérateur en C a une associativité de gauche à droite. Cela signifie que l'expression entre parenthèses équivalente pour le deuxième exemple de code est :

<code class="cpp">const string message = (("Hello" + ",world") + exclam);</code>
Copier après la connexion

Comme vous pouvez le voir, les deux chaînes littérales "Hello" et ",world" sont concaténées en premier, ce qui donne lieu à la compilation. erreur.

Surmonter la limitation

Il existe plusieurs façons de surmonter cette limitation :

  1. Utilisez une chaîne std::string Objet :
<code class="cpp">const string message = string("Hello") + ",world" + exclam;</code>
Copier après la connexion
  1. Parenthèses l'expression :
<code class="cpp">const string message = "Hello" + (",world" + exclam);</code>
Copier après la connexion

Raison de la limitation

La limitation de ne pas pouvoir concaténer directement deux chaînes littérales est due au fait qu'une chaîne littérale est un tableau de caractères (un const char [N] où N est la longueur de la chaîne plus un, pour le terminateur nul). Lorsque vous utilisez un tableau dans la plupart des contextes, il est converti en pointeur vers son élément initial.

Par conséquent, lorsque vous essayez de concaténer deux littéraux de chaîne à l'aide de , vous essayez en fait d'ajouter deux pointeurs const char* ensemble . Cela n'est pas possible car l'ajout de deux pointeurs n'a pas de sens dans le contexte de concaténation de chaînes.

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
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!