将一个整数添加到std::string中

83

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

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

你能否补充一下ClientID的定义?它是std::string还是char *类型? - dwalter
顺便说一下,显示无效的空指针。 - Hakon89
4个回答

229

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

6
支持使用boost::lexical_cast。 - user1356386
99
+1 for std::to_string 的翻译: 对于 std::to_string,给一个赞。 - luke
8
感谢您的评价,我会尽力为您提供清晰、简洁和完整的答案。 - ervinbosenbacher
1
std::to_string没有需要int的函数... - Hakon89
+1 for string stream!虽然我很好奇,这些方法中是否有任何一种被认为比其他方法更好?例如,其中一种方法更快、处理内存更好还是只是更好的实践? - Kris
显示剩余6条评论

9
你不能将int强制转换为char*以获取字符串。尝试使用以下方法:
std::ostringstream sstream;
sstream << "select logged from login where id = " << ClientID;
std::string query = sstream.str();

stringstream reference


1
哇...这是我第一次看到istringstream...谢谢。 - Hakon89
1
抱歉,应该是ostringstream。已修复。 - luke

4

我有一种感觉,你的ClientID不是字符串类型(以零结尾的char*std::string),而是某种整数类型(例如int),因此你需要先将数字转换为字符串:

std::stringstream ss;
ss << ClientID;
query.append(ss.str());

但是你也可以使用operator+(而不是append):

query += ss.str();

2
您将 ClientID 转换为 char*,导致函数假定它是一个以 null 结尾的字符数组,但实际上它并不是。
来自 cplusplus.com 的内容:

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


好的,我明白了。那么如何将整数值附加到末尾? - Hakon89
请查看@hmjd的答案,他已经涵盖了这个问题。 - WeaselFox

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接