2012-05-09 2 views
54

Почему этот код дает ошибку подтверждения отладки?Добавить int в std :: string

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

Что такое 'ClientID'? – hmjd

+0

можете добавить к определению ClientID? это std :: string или char *? – dwalter

+0

извините, обновление ^^ – Hakon89

ответ

2

Вы бросаете ClientID на символ * вызывает функцию взять на себя нулевой terinated массив символов, который он не является.

от cplusplus.com:

строки & Append (Const символ * с); Добавляет копию строки, сформированной , с помощью символьной последовательности с нулевым символом (строка C), обозначенной знаком s. Длина этой символьной последовательности определяется первым вводом нулевого символа (как определено по длинам (знаменателями)).

+0

Хорошо, я понял. Ну как можно добавить к концу целое значение? – Hakon89

+0

см. @hmjd ответ ниже .. он уже охватывает это. – WeaselFox

171

Метод std::string::append() ожидает, что его аргумент будет состоять из строки с нулевым завершением (char*).

Есть несколько подходов для получения string в 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 для boost :: lexical_cast. –

+67

+1 для std :: to_string – luke

+3

+1 для чистого, чистого и полного ответа – ervinbosenbacher

5

Вы не можете бросить Int на символ *, чтобы получить строку. Попробуйте это:

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

stringstream reference

+0

Вау ... его первый раз я вижу istringstream ... спасибо. – Hakon89

+0

Извините, это должно быть ostringstream. Исправлена. – luke

2

У меня есть ощущение, что ваш ClientID не от типа строки (нуль char* или std::string), но некоторый интегральный типа (например, int), поэтому вам необходимо преобразовать номер в строку первой:

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

Но вы можете использовать operator+, а также (вместо append):

query += ss.str();