Подтвердить что ты не робот

Добавьте int к std::string

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

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

Ответ 1

Метод 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 (С++ 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));
    

Ответ 2

Вы не можете передать int в char *, чтобы получить строку. Попробуйте следующее:

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

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

Ответ 3

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

от cplusplus.com:

строка & append (const char * s); Добавляет копию строки, сформированной по символьной последовательности с нулевым символом (строка C), на которую указывает s. длина этой последовательности символов определяется первым вхождением нулевого символа (как определено traits.length(s)).

Ответ 4

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

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

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

query += ss.str();