Partager via


Littéraux de chaîne C++

Un littéral de chaîne se compose de zéro ou plus de caractères du jeu de caractères de source entouré par des guillemets doubles (").Un littéral de chaîne représente une séquence de caractères pris qui, ensemble, forment une chaîne terminée par le caractère NULL.

Les littéraux de chaîne peuvent contenir n'importe quel caractère graphique du jeu de caractères de source sauf le guillemet double ("), la barre oblique inverse (\), ou le caractère de saut de ligne.Ils peuvent contenir les mêmes séquences d'échappement décrites dans Constantes caractère C++.

Les chaînes C++ possèdent ces types :

  • Tableau d' char] [n, où n représente la longueur de la chaîne (caractères) ainsi que 1 pour 'effectuant \0' qui marque la fin de la chaîne

  • Tableau d' wchar_t, des chaînes à caractères larges

Le résultat de modifier une constante de chaîne est pas défini.Par exemple :

char *szStr = "1234";
szStr[2] = 'A';      // Results undefined

Spécifique à Microsoft

Dans certains cas, des littéraux de chaîne identiques peuvent « être regroupés » pour économiser de l'espace dans le fichier exécutable.Dans le regroupement de littéral de chaîne, le compilateur effectue indiquer toutes les références à un littéral de chaîne particulier le même emplacement en mémoire, au lieu d'avoir chaque point de référence à une instance distincte du littéral de chaîne./GF active le regroupement des chaînes.

Spécifiques à Microsoft FIN

En spécifiant des littéraux de chaîne, les chaînes adjacentes sont concaténées.Par conséquent, cette déclaration :

char szStr[] = "12" "34";

identique à cette déclaration :

char szStr[] = "1234";

Cette concaténation des chaînes adjacentes facilite de spécifier les longues chaînes entre plusieurs lignes :

cout << "Four score and seven years "
        "ago, our forefathers brought forth "
        "upon this continent a new nation.";

Dans l'exemple précédent, la chaîne entière Four score and seven years ago, our forefathers brought forth upon this continent a new nation. est épissée ensemble.Cette chaîne peut également être spécifiée à l'aide de la ligne épissant comme suit :

cout << "Four score and seven years \
ago, our forefathers brought forth \
upon this continent a new nation.";

Une fois toutes les chaînes adjacentes dans la constante ont été concaténées, le caractère de NULL , '\0', sont ajoutées pour fournir une marque de fin de chaîne pour les fonctions de gestion de C.

Lorsque la première chaîne contient un caractère d'échappement, la concaténation de chaînes peut générer des résultats étonnants.Considérez les deux déclarations suivantes :

char szStr1[] = "\01" "23";
char szStr2[] = "\0123";

Bien qu'il soit naturel de supposer qu' szStr1 et szStr2 contiennent les mêmes valeurs, les valeurs qu'il contient réellement sont présentées dans l'illustration suivante.

Échappements et concaténation de chaînes

Échappements et concaténation de chaînes

Spécifique à Microsoft

La longueur maximale d'un littéral de chaîne est de 16.384 octets (16K).Cette limite s'applique aux chaînes du type char[] et wchar_t[].Si un littéral de chaîne se compose des composants entre guillemets, le préprocesseur concatène les parties dans une chaîne unique, et pour chaque ligne concaténée, il ajoute un octet supplémentaire au nombre total d'octets.

Par exemple, supposons qu'une chaîne est composé de 40 lignes à 50 caractères par ligne (2.000 caractères), et d'une ligne avec 7 caractères, et chaque ligne est délimitée par des guillemets doubles.Cela ajoute à 2.007 octets ainsi qu'un octet pour le caractère NULL de fin, pour un total de 2.008 octets.Sur la concaténation, un caractère supplémentaire est ajouté au nombre total d'octets pour chacun des 40 premières lignes.Cela provoque un total de 2.048 octets.(Les caractères supplémentaires ne sont pas écrits dans la chaîne finale.) Notez, cependant, qui si les suites de ligne (\) est utilisée au lieu de guillemets doubles, le préprocesseur n'ajoute pas un caractère supplémentaire pour chaque ligne.

Spécifiques à Microsoft FIN

Déterminez la taille des objets String en comptant le nombre de caractères et en additionnant 1 pour '\0' de fin ou 2 pour le type wchar_t.

Étant donné que le guillemet double (") englobe les chaînes, utilisez la séquence d'échappement (\") pour représenter des guillemets doubles placé.Le guillemet simple (') peut être représenté sans séquence d'échappement.La barre oblique inverse (\) est un caractère de continuation de ligne lorsqu'elle est définie à la fin d'une ligne.Si vous souhaitez une barre oblique inverse pour apparaître dans une chaîne, vous devez les barres obliques inverses de type deux (\\).(Consultez phases de traduction dans la référence de préprocesseur pour plus d'informations sur la continuation de ligne.)

Pour spécifier une chaîne de type à caractères larges (wchar_t[]), faites précéder le guillemet de double d'ouverture avec le caractère L.Par exemple :

wchar_t wszStr[] = L"1a1g";

Tous les codes d'échappement normaux répertoriés dans Constantes caractère sont valides dans des constantes de chaîne.Par exemple :

cout << "First line\nSecond line";
cout << "Error! Take corrective action\a";

Étant donné que le code d'échappement est terminé au premier caractère qui n'est pas un chiffre hexadécimal, la spécification des constantes de chaîne avec les codes d'échappement hexadécimaux incorporé peut provoquer des résultats inattendus.L'exemple suivant est conçu pour créer un littéral de chaîne contenant ASCII 5, suivi des caractères five:

"\x05five"

Le résultat réel est un 5F hexadécimal, qui est le code ASCII pour un trait de soulignement, suivi des caractères ive.L'exemple suivant donne les effets souhaités :

"\005five"     // Use octal constant.
"\x05" "five"  // Use string splicing.

Voir aussi

Référence

Littéraux C++