为什么这段代码会导致Debug Assertion Fail?
std::string query;
int ClientID = 666;
query = "select logged from login where id = ";
query.append((char *)ClientID);
std::string::append()
方法希望它的参数是以NULL结束的字符串 (char*
)。
有几种方法可以生成包含 int
的 string
:
#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));
std::ostringstream sstream;
sstream << "select logged from login where id = " << ClientID;
std::string query = sstream.str();
我有一种感觉,你的ClientID
不是字符串类型(以零结尾的char*
或std::string
),而是某种整数类型(例如int
),因此你需要先将数字转换为字符串:
std::stringstream ss;
ss << ClientID;
query.append(ss.str());
但是你也可以使用operator+
(而不是append
):
query += ss.str();
ClientID
转换为 char*,导致函数假定它是一个以 null 结尾的字符数组,但实际上它并不是。string& append ( const char * s ); 追加由指向 s 的以 null 结尾的字符序列(C 字符串)组成的字符串的副本。此字符序列的长度由第一个空字符(由 traits.length(s) 确定)的出现确定。