Вопрос по c++ – Добавить int к std :: string [duplicate]

64

This question already has an answer here:

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

   std::string query;
   int ClientID = 666;
   query = "select logged from login where id = ";
   query.append((char *)ClientID);
извините, обновите ^^ Hakon89
Вы можете добавить к определению ClientID? это std :: string или char *? dwalter
Что такоеClientID? hmjd
говорит недействительный нулевой указатель между прочим Hakon89

Ваш Ответ

4   ответа
5

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

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

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

Извините, это должно быть ostringstream. Исправлена.
Вау ... это первый раз, когда я вижу istringstream ... спасибо. Hakon89
186

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));
+1 за ясный, чистый и полный ответ
std :: to_string не имеет функции, которая требует int ... Hakon89
+1 для std :: to_string
+1 для повышения :: lexical_cast.
Вам нужно vs2011
2

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)).

смотрите ответ @hmjd ниже .. он уже покрывает это.
Ладно, я понял. Ну как можно в конце добавить целочисленное значение? Hakon89
2

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

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

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

query += ss.str();

Похожие вопросы