Ajouter un entier à une std::string : pourquoi l'assertion échoue
En C, lorsque vous tentez d'ajouter une valeur entière directement à une std::string comme indiqué ci-dessous :
std::string query; int ClientID = 666; query = "select logged from login where id = "; query.append((char *)ClientID);
vous pouvez rencontrer une assertion de débogage Échouer. Cela se produit car la méthode std::string::append() requiert que son argument soit une chaîne terminée par NULL (char*). Cependant, passer un entier comme pointeur vers un tableau de caractères sans le terminer par un caractère nul entraînera un comportement indéfini et potentiellement un crash.
Pour ajouter correctement un entier à un std::string, plusieurs approches sont disponible :
1. Utilisation de std::ostringstream :
#include <sstream> std::ostringstream s; s << "select logged from login where id = " << ClientID; std::string query(s.str());
Cette méthode crée un objet stringstream, y insère le texte et la valeur entière et récupère la chaîne résultante.
2. Utilisation de std::to_string (C 11) :
std::string query("select logged from login where id = " + std::to_string(ClientID));
Cette approche utilise la fonction std::to_string pour convertir l'entier en chaîne, puis effectue la concaténation.
3. Utilisation de boost::lexical_cast :
#include <boost/lexical_cast.hpp> std::string query("select logged from login where id = " + boost::lexical_cast<std::string>(ClientID));
Cette méthode utilise la fonction lexical_cast de la bibliothèque Boost pour convertir l'entier en chaîne et effectuer la concaténation.
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!