Lorsque vous essayez d'utiliser printf avec un std::string, vous pouvez rencontrer comportement inattendu tel que l'impression de chaînes apparemment aléatoires au lieu de la valeur std::string prévue.
Cela se produit car printf est une fonction C qui opère sur des chaînes de style C, tandis que std::string est un objet C gérant la mémoire allouée dynamiquement. Pour remédier à cela, il existe plusieurs approches :
Utilisation de std::cout:
La solution la plus simple consiste à utiliser std::cout, qui prend en charge la surcharge des opérateurs pour std::string, vous permettant de l'imprimer directement :
std::cout << "Follow this command: " << myString;
En utilisant c_str() :
Si vous devez extraire la chaîne de style C terminée par un caractère nul de std::string, vous pouvez utiliser la méthode c_str() :
printf("Follow this command: %s", myString.c_str());
En utilisant std::format:
Pour le C moderne (C 20 et versions ultérieures), vous pouvez profiter de std::format, qui fournit un moyen polyvalent et sécurisé de formater des chaînes :
std::cout << "Follow this command: " << std::format("{}", myString);
Utilisation de modèles variadiques :
Si vous avez besoin de plus de contrôle sur le format de sortie, vous pouvez envisager d'utiliser des modèles variadiques. Cependant, il n'y a pas de fonction intégrée dans la bibliothèque standard similaire à printf qui utilise des modèles variadiques.
Utilisation de Boost.Format :
Boost fournit une bibliothèque d'en-tête uniquement appelé Boost.Format, qui offre un moyen alternatif d'effectuer un formatage de type printf à l'aide de modèles variadiques.
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!