Maison >développement back-end >C++ >Pourquoi l'ajout d'un entier à une chaîne en C provoque-t-il un échec d'assertion ?
Ajout d'un entier à une chaîne en C : Dépannage d'un échec d'assertion
Considérez le code suivant qui tente d'ajouter un entier à une chaîne :
std::string query; int ClientID = 666; query = "select logged from login where id = "; query.append((char *)ClientID);
Cependant, ce code déclenche un échec d'assertion de débogage. Pour comprendre pourquoi, nous devons examiner le comportement attendu de std::string::append().
std::string::append() prend un argument char*, qui doit être terminé par NULL. Chaîne de style C. Cependant, dans notre cas, nous transmettons un pointeur brut vers l'entier ClientID, qui n'est pas une chaîne terminée par NULL.
Approches de solution
Pour ajouter un entier en chaîne en C , vous avez plusieurs options :
1. std::ostringstream
#include <sstream> std::ostringstream s; s << "select logged from login where id = " << ClientID; std::string query(s.str());
2. std::to_string (C 11 et versions ultérieures)
std::string query("select logged from login where id = " + std::to_string(ClientID));
3. Boost::lexical_cast
#include <boost/lexical_cast.hpp> std::string query("select logged from login where id = " + boost::lexical_cast<std::string>(ClientID));
Chacune de ces approches convertira correctement l'entier ClientID en chaîne et l'ajoutera à la chaîne de base, produisant une chaîne valide sans déclencher d'échec d'assertion.
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!