Il est compréhensible d'être confus lors de l'utilisation de printf avec std::string, car il peut sembler qu'ils devraient travailler ensemble de manière transparente puisque la chaîne est membre de l'espace de noms std. Cependant, ce n'est pas le cas en raison de la nature non sécurisée de printf.
Printf utilise des arguments variables au sens C, ce qui signifie que vous pouvez transmettre n'importe quel nombre d'arguments, mais cela dépend de vous pour le lui dire. le nombre et les types de ces arguments. Dans le cas de printf, cela se fait via une chaîne avec des informations de type codées, telles que %d pour un int. Si vous mentez sur le type ou le nombre d'arguments, la fonction n'a aucun moyen standard de le savoir et présentera un comportement indéfini.
Avec std::string, qui est une construction C de type sécurisé, printf n'a aucune option pour cela, seulement une chaîne de style C. Utiliser autre chose à la place de ce à quoi il s'attend ne vous donnera certainement pas les résultats souhaités.
Une solution simple à ce problème consiste à imprimer normalement en utilisant std::cout, puisque std::string prend en charge la surcharge d'opérateur pour cela. goal:
std::cout << "Follow this command: " << myString;
Si vous devez extraire la chaîne de style C pour une raison quelconque, vous pouvez utiliser la méthode c_str() de std::string pour obtenir un const char * qui est terminé par un nul. Voici un exemple mis à jour utilisant c_str() :
printf("Follow this command: %s", myString.c_str()); // note the use of c_str
Pour une fonction de type sécurisé qui se comporte de la même manière que printf, envisagez d'utiliser des modèles variadiques (introduits dans C 11). Vous pouvez en trouver un exemple [ici](https://en.cppreference.com/w/cpp/utility/variadic). De plus, Boost propose une bibliothèque potentiellement utile appelée boost::format.
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!