Pourquoi ce code donne-t-il un Debug Assertion Fail ?
std::string query;
int ClientID = 666;
query = "select logged from login where id = ";
query.append((char *)ClientID);
Pourquoi ce code donne-t-il un Debug Assertion Fail ?
std::string query;
int ClientID = 666;
query = "select logged from login where id = ";
query.append((char *)ClientID);
Le site 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));
J'ai le sentiment que votre ClientID
n'est pas de type chaîne de caractères (à terminaison nulle). char*
ou std::string
) mais un certain type d'intégrale (par ex. int
), vous devez donc d'abord convertir le nombre en chaîne de caractères :
std::stringstream ss;
ss << ClientID;
query.append(ss.str());
Mais vous pouvez utiliser operator+
également (au lieu de append
) :
query += ss.str();
Vous faites un casting ClientID
en char*, ce qui fait que la fonction suppose qu'il s'agit d'un tableau de chars à terminaison nulle, ce qui n'est pas le cas.
de cplusplus.com :
string& append ( const char * s ) ; Applique une copie de la chaîne de caractères formée formée par la séquence de caractères à terminaison nulle (chaîne C) pointée par s. longueur de cette séquence de caractères est déterminée par la première ocurrence d'un caractère nul (comme déterminé par traits.length(s)).
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.