web-dev-qa-db-fra.com

Comment obtenir des guillemets doubles dans un littéral de chaîne?

J'ai la sortie suivante créée à l'aide d'une instruction printf():

printf("She said time flies like an arrow, but fruit flies like a banana.");

mais je veux mettre la citation réelle entre guillemets, donc la sortie est

Elle a dit "le temps passe comme une flèche, mais les fruits volent comme une banane".

sans interférer avec les guillemets doubles utilisés pour encapsuler le littéral de chaîne dans l'instruction printf().

Comment puis-je faire ceci?

18
kevthanewversi

Échappez aux guillemets avec des barres obliques inverses:

printf("She said \"time flies like an arrow, but fruit flies like a banana\"."); 

Il existe des caractères d'échappement spéciaux que vous pouvez utiliser dans les littéraux de chaîne, et ceux-ci sont indiqués par une barre oblique inverse de début.

54
Mark Byers

Heureusement, avec C++ 11, il existe également une approche plus agréable consistant à utiliser des littéraux de chaîne bruts.

printf("She said \"time flies like an arrow, but fruit flies like a banana\".");

Devient:

printf(R"(She said "time flies like an arrow, but fruit flies like a banana".)");

En ce qui concerne l'ajout de crochets après la citation d'ouverture et avant la citation de fermeture, notez qu'ils peuvent être presque n'importe quelle combinaison de 16 caractères maximum, ce qui permet d'éviter la situation où la combinaison est présente dans la chaîne elle-même. Plus précisément:

tout membre du jeu de caractères source de base, à l'exception de: l'espace, la parenthèse gauche (, la parenthèse droite), la barre oblique inverse\et les caractères de contrôle représentant la tabulation horizontale, la tabulation verticale, le saut de page et la nouvelle ligne "(N3936 §2.14.5 [ Lex.string] grammar) et "au plus 16 caractères" (§2.14.5/2)

La clarté de cette phrase peut être discutable, mais lorsqu'elle est utilisée sur des chaînes formatées comme HTML ou JSON, elle est incontestablement beaucoup plus claire.

13
pjcard