Voeg een int toe aan een std::string

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 stringte maken met een int:

  • std::ostringstream

    #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));
    
  • boost::lexical_cast

    #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();

stringstream-referentie


Antwoord 3

Ik heb het gevoel dat uw ClientIDniet 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 ClientIDnaar 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)).

Other episodes