将一个int附加到std :: string
为什么这个代码给debugging断言失败?
std::string query; int ClientID = 666; query = "select logged from login where id = "; query.append((char *)ClientID);
std::string::append()
方法期望它的参数是一个NULL结尾的string( char*
)。
生成包含int
的string
有几种方法:
-
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));
你不能强制转换成char *来获取一个string。 尝试这个:
std::ostringstream sstream; sstream << "select logged from login where id = " << ClientID; std::string query = sstream.str();
stringstream引用
您正在将ClientID
强制转换为char *,从而导致函数假定其为空的char型数组,而事实并非如此。
来自cplusplus.com:
string&append(const char * s); 附加由s指向的以空字符结尾的字符序列(Cstring)形成的string的副本。 该字符序列的长度由空字符的第一次出现(由traits.length(s)确定)确定。
我有一种感觉,你的ClientID
不是一个stringtypes(零终止的char*
或std::string
),但一些整数types(如int
),所以你需要首先将数字转换为string:
std::stringstream ss; ss << ClientID; query.append(ss.str());
但是你也可以使用operator+
(而不是append
):
query += ss.str();