2012-05-09 12 views
54

¿Por qué este código da un error de aserción de depuración?Agregue un int a std :: string

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

¿Qué es 'ClientID'? – hmjd

+0

puede agregar a la definición de ClientID? ¿es un std :: string o un char *? – dwalter

+0

lo siento, actualice ^^ – Hakon89

Respuesta

2

Usted está echando ClientID a char * causando la función de asumir su nula terinated una matriz de caracteres, lo que no lo es.

de cplusplus.com:

cadena & modo de adición (const char * s); Añade una copia de la cadena formada por la secuencia de caracteres terminada en nulo (cadena C) apuntada por s. La longitud de esta secuencia de caracteres está determinada por la primera ocurrencia de un carácter nulo (según lo determinado por rasgos.tiempo (s)).

+0

Ok, lo tengo. Bueno, ¿cómo se puede agregar al final un valor entero? – Hakon89

+0

ver @hmjd la respuesta abajo abajo .. él ya lo cubre. – WeaselFox

171

El método std::string::append() espera que su argumento sea una cadena con terminación NULL (char*).

Hay varios enfoques para la producción de un string containg un 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)); 
    
+6

+1 para boost :: lexical_cast. –

+67

+1 para std :: to_string – luke

+3

+1 para la respuesta clara, limpia y completa – ervinbosenbacher

5

No se puede emitir un int a char * para obtener una cadena. Prueba esto:

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

stringstream reference

+0

Wow ... es la primera vez que veo istringstream ... gracias. – Hakon89

+0

Lo siento, eso debería ser ostringstream. Fijo. – luke

2

Tengo la sensación de que su ClientID no es de un tipo de cadena (cero terminados char* o std::string) pero algunos tipo integral (por ejemplo int) por lo que necesita para convertir el número a la primera cadena:

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

pero se puede utilizar operator+ también (en lugar de append):

query += ss.str(); 
Cuestiones relacionadas