将int附加到std :: string

时间:2012-05-09 12:33:53

标签: c++ std

为什么这段代码会导致Debug Assertion失败?

   std::string query;
   int ClientID = 666;
   query = "select logged from login where id = ";
   query.append((char *)ClientID);

4 个答案:

答案 0 :(得分:194)

std::string::append()方法期望其参数为以NULL结尾的字符串(char*)。

有几种方法可以产生string int

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

答案 1 :(得分:5)

您不能将int转换为char *来获取字符串。试试这个:

std::ostringstream sstream;
sstream << "select logged from login where id = " << ClientID;
std::string query = sstream.str();

stringstream reference

答案 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();