Добавить int к std :: string [duplicate]

This question already has an answer here:

How to concatenate a std::string and an int? 29 answers

Почему этот код дает сбой отладочного утверждения?

<code>   std::string query;
   int ClientID = 666;
   query = "select logged from login where id = ";
   query.append((char *)ClientID);
</code>
 Hakon8909 мая 2012 г., 14:38
извините, обновите ^^
 hmjd09 мая 2012 г., 14:36
Что такоеClientID?
 dwalter09 мая 2012 г., 14:37
Вы можете добавить к определению ClientID? это std :: string или char *?
 Hakon8909 мая 2012 г., 14:39
говорит недействительный нулевой указатель между прочим

Ответы на вопрос(4)

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));
 09 мая 2012 г., 14:42
+1 для повышения :: lexical_cast.
 09 мая 2012 г., 14:48
+1 для std :: to_string
 09 мая 2012 г., 14:50
+1 за ясный, чистый и полный ответ
 Hakon8909 мая 2012 г., 14:52
std :: to_string не имеет функции, которая требует int ...
 09 мая 2012 г., 14:55
Вам нужно vs2011

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

от cplusplus.com:

string& append ( const char * s ); Appends a copy of the string formed by the null-terminated character sequence (C string) pointed by s. The length of this character sequence is determined by the first ocurrence of a null character (as determined by traits.length(s)).

 Hakon8909 мая 2012 г., 14:41
Ладно, я понял. Ну как можно в конце добавить целочисленное значение?
 09 мая 2012 г., 14:42
смотрите ответ @hmjd ниже .. он уже покрывает это.

чтобы получить строку. Попробуй это:

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

ссылка на поток строк

 09 мая 2012 г., 14:44
Извините, это должно быть ostringstream. Исправлена.
 Hakon8909 мая 2012 г., 14:43
Вау ... это первый раз, когда я вижу istringstream ... спасибо.

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

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

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

query += ss.str();

Ваш ответ на вопрос