Pourquoi ce code donne-t-il un échec d'assertion de débogage?
std::string query;
int ClientID = 666;
query = "select logged from login where id = ";
query.append((char *)ClientID);
La méthode std::string::append()
s'attend à ce que son argument soit une chaîne terminée par NULL (char*
).
Il existe plusieurs approches pour produire un string
contenant un int
:
#include <sstream>
std::ostringstream s;
s << "select logged from login where id = " << ClientID;
std::string query(s.str());
std::to_string
(C++ 11)
std::string query("select logged from login where id = " +
std::to_string(ClientID));
#include <boost/lexical_cast.hpp>
std::string query("select logged from login where id = " +
boost::lexical_cast<std::string>(ClientID));
Vous ne pouvez pas convertir un int en char * pour obtenir une chaîne. Essaye ça:
std::ostringstream sstream;
sstream << "select logged from login where id = " << ClientID;
std::string query = sstream.str();
Vous transformez ClientID
en char *, ce qui fait que la fonction assume un tableau de caractères null, ce qui n’est pas le cas.
de cplusplus.com:
string & append (const char * s); Ajoute une copie de la chaîne formée par la séquence de caractères terminée par un caractère nul (chaîne C) indiquée par s. La longueur de cette séquence de caractères est déterminée par la première occurrence d'un caractère nul (déterminé par traits.length (s)).
J'ai l'impression que votre ClientID
n'est pas de type chaîne (char*
Ou std::string
À zéro), mais un type intégral (par exemple, int
) afin vous devez d'abord convertir le nombre en chaîne:
std::stringstream ss;
ss << ClientID;
query.append(ss.str());
Mais vous pouvez aussi utiliser operator+
(Au lieu de append
):
query += ss.str();