Aggiungi un int a uno std :: string

Perché questo codice dà esito negativo all’asserzione di debug?

std::string query; int ClientID = 666; query = "select logged from login where id = "; query.append((char *)ClientID); 

Il metodo std::string::append() aspetta che il suo argomento sia una stringa terminata NULL ( char* ).

Esistono diversi approcci per produrre una string contiene un int :

  • std::ostringstream

     #include  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  std::string query("select logged from login where id = " + boost::lexical_cast(ClientID)); 

Non è ansible eseguire il cast di un int in un char * per ottenere una stringa. Prova questo:

 std::ostringstream sstream; sstream << "select logged from login where id = " << ClientID; std::string query = sstream.str(); 

riferimento stringstream

Si ClientID cast di ClientID su char * facendo in modo che la funzione assuma un array di caratteri terizzati null, che non è.

da cplusplus.com:

string & append (const char * s); Aggiunge una copia della stringa formata dalla sequenza di caratteri terminata da null (stringa C) puntata da s. La lunghezza di questa sequenza di caratteri è determinata dalla prima occorrenza di un carattere nullo (come determinato da traits.length (s)).

Ho la sensazione che il tuo ClientID non sia un tipo di stringa ( char* terminazione zero o std::string ) ma un tipo integrale (es. int ) quindi devi prima convertire il numero nella stringa:

 std::stringstream ss; ss << ClientID; query.append(ss.str()); 

Ma puoi usare anche l' operator+ (invece di append ):

 query += ss.str();