将 int 附加到 std::string

Append an int to a std::string

本文关键字:std string int      更新时间:2023-10-16

为什么这段代码给出调试断言失败?

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

std::string::append() 方法期望其参数为以 NULL 结尾的字符串 ( 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));
    

不能将 int 强制转换为 char* 以获取字符串。 试试这个:

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*,导致函数假定它是一个空的 char 数组,但事实并非如此。

从 cplusplus.com :

string& append ( const char * s );追加所形成字符串的副本 由 s 指向的以 null 结尾的字符序列(C 字符串)。这 此字符序列的长度由第一次出现确定 的空字符(由 traits.length(s) 确定)。