Почему этот код дает ошибку подтверждения отладки?
std::string query;
int ClientID = 666;
query = "select logged from login where id = ";
query.append((char *)ClientID);
Почему этот код дает ошибку подтверждения отладки?
std::string query;
int ClientID = 666;
query = "select logged from login where id = ";
query.append((char *)ClientID);
Метод std::string::append()
ожидает, что его аргумент будет состоять из строки с нулевым завершением (char*
).
Существует несколько подходов для создания string
, содержащего int
:
#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));
#include <boost/lexical_cast.hpp>
std::string query("select logged from login where id = " +
boost::lexical_cast<std::string>(ClientID));
Вы не можете передать int в char *, чтобы получить строку. Попробуйте следующее:
std::ostringstream sstream;
sstream << "select logged from login where id = " << ClientID;
std::string query = sstream.str();
Вы отбрасываете ClientID
в char *, заставляя функцию принимать свой нуль-терминированный массив char, которого нет.
от cplusplus.com:
строка & append (const char * s); Добавляет копию строки, сформированной по символьной последовательности с нулевым символом (строка C), на которую указывает s. длина этой последовательности символов определяется первым вхождением нулевого символа (как определено traits.length(s)).
Я чувствую, что ваш ClientID
не имеет строковый тип (с нулевым завершением char*
или std::string
), но некоторый целостный тип (например, int
), поэтому вам нужно сначала преобразовать число в строку
std::stringstream ss;
ss << ClientID;
query.append(ss.str());
Но вы также можете использовать operator+
(вместо append
):
query += ss.str();