Concaténation de littéraux de chaîne avec des chaînes
En C , l'opérateur peut être utilisé pour concaténer des chaînes et des littéraux de chaîne. Cependant, cette fonctionnalité présente des limitations qui peuvent prêter à confusion.
Dans la question, l'auteur tente de concaténer les chaînes littérales "Hello", ",world" et "!" de deux manières différentes. Le premier exemple :
const string hello = "Hello";
const string message = hello ",world" "!";
Dans ce cas, le code est compilé et exécuté avec succès. En effet, le premier opérande de l'opérateur est un objet chaîne (bonjour), le compilateur le traite donc comme une concaténation d'une chaîne et de deux littéraux de chaîne.
Cependant, le deuxième exemple :
const string exclam = "!";
const string message = "Hello" ",world" exclam;
échec de la compilation. En effet, l'opérateur le plus à gauche tente de concaténer deux chaînes littérales, ce qui n'est pas autorisé. Le compilateur interprète ce code comme :
const string message = (("Hello" ",world") exclam);
et la première concaténation tente d'ajouter deux pointeurs ( const char* littéraux) ensemble.
Pour résoudre ce problème, le code doit soit :
Faire de l'une des deux premières chaînes concaténées un objet chaîne :
const string message = string("Hello") ",world" exclam;
Utilisez des parenthèses pour forcer le second à être évalué en premier :
const string message = "Hello" (",world" exclam);
La raison pour laquelle vous ne pouvez pas concaténer deux littéraux de chaîne à l'aide est que les littéraux de chaîne sont stockés sous forme des tableaux de caractères, qui ne peuvent pas être directement additionnés. Lorsque vous utilisez une chaîne littérale dans la plupart des contextes, elle est convertie en pointeur vers son élément initial, qui n'est pas un opérande valide pour l'opérateur.
Par conséquent, il est important de se rappeler que seul l'un des deux opérandes les plus à gauche dans une concaténation, l'expression peut être une chaîne littérale. Les chaînes littérales peuvent cependant être concaténées en les plaçant les unes à côté des autres, comme dans :
"Hello" ",world"
"Hello,world"
Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.
Copyright© 2022 湘ICP备2022001581号-3