Waarom geeft deze code een foutopsporingsbevestiging?
std::string query;
int ClientID = 666;
query = "select logged from login where id = ";
query.append((char *)ClientID);
Antwoord 1, autoriteit 100%
De std::string::append()
methode verwacht dat zijn argument een NULL-beëindigde string is (char*
).
Er zijn verschillende manieren om een string
te maken met een 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));
Antwoord 2, autoriteit 3%
Je kunt geen int casten naar een char* om een string te krijgen. Probeer dit:
std::ostringstream sstream;
sstream << "select logged from login where id = " << ClientID;
std::string query = sstream.str();
Antwoord 3
Ik heb het gevoel dat uw ClientID
niet van het tekenreekstype is (zero-terminated char*
of std::string
) maar een integraal type (bijv. int
), dus je moet eerst het getal naar de tekenreeks converteren:
std::stringstream ss;
ss << ClientID;
query.append(ss.str());
Maar u kunt ook operator+
gebruiken (in plaats van append
):
query += ss.str();
Antwoord 4
Je cast ClientID
naar char*, waardoor de functie ervan uitgaat dat het een null-terinated char-array is, wat niet het geval is.
van cplusplus.com :
string& toevoegen ( const char * s); Voegt een kopie van de gevormde string toe
door de op nul eindigende tekenreeks (C-tekenreeks) die wordt aangeduid door s. De
lengte van deze tekenreeks wordt bepaald door het eerste voorkomen
van een null-teken (zoals bepaald door traits.length(s)).