将一个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* )。

生成包含intstring有几种方法:

  • 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();