为什么这段代码会导致Debug Assertion失败?
std::string query;
int ClientID = 666;
query = "select logged from login where id = ";
query.append((char *)ClientID);
答案 0 :(得分:194)
std::string::append()
方法期望其参数为以NULL结尾的字符串(char*
)。
有几种方法可以产生string
int
:
#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));
#include <boost/lexical_cast.hpp>
std::string query("select logged from login where id = " +
boost::lexical_cast<std::string>(ClientID));
答案 1 :(得分:5)
您不能将int转换为char *来获取字符串。试试这个:
std::ostringstream sstream;
sstream << "select logged from login where id = " << ClientID;
std::string query = sstream.str();
答案 2 :(得分:2)
您正在将ClientID
强制转换为char *,导致函数假定其为空的terinated char数组,而不是。
来自cplusplus.com:
的字符串&安培; append(const char * s);附加形成的字符串的副本 由s指向的以null结尾的字符序列(C字符串)。该 该字符序列的长度由第一次发生确定 一个空字符(由traits.length(s)确定)。
答案 3 :(得分:2)
我觉得你的ClientID
不是字符串类型(零终止char*
或std::string
),而是一些整数类型(例如int
)所以你需要先将数字转换为字符串:
std::stringstream ss;
ss << ClientID;
query.append(ss.str());
但您也可以使用operator+
(而不是append
):
query += ss.str();