将 int 附加到 std::string [重复]
Posted
技术标签:
【中文标题】将 int 附加到 std::string [重复]【英文标题】:Append an int to a std::string [duplicate] 【发布时间】:2012-05-17 23:23:27 【问题描述】:为什么这段代码会给出调试断言失败?
std::string query;
int ClientID = 666;
query = "select logged from login where id = ";
query.append((char *)ClientID);
【问题讨论】:
您可以添加到 ClientID 的定义中吗?它是 std::string 还是 char * ? 顺便说一下无效的空指针 【参考方案1】:std::string::append()
方法期望其参数是一个以 NULL 结尾的字符串 (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));
【讨论】:
+1 表示 boost::lexical_cast。 +1 表示 std::to_string +1 表示清晰、干净和完整的答案 std::to_string 没有需要 int 的函数... 按照标准执行(查看参考链接)。但是,您的编译器可能还没有实现它。【参考方案2】:您不能将 int 转换为 char* 来获取字符串。试试这个:
std::ostringstream sstream;
sstream << "select logged from login where id = " << ClientID;
std::string query = sstream.str();
stringstream reference
【讨论】:
哇...我第一次看到 istringstream...谢谢。 抱歉,应该是 ostringstream。固定。【参考方案3】:我感觉您的ClientID
不是字符串类型(以零结尾的char*
或std::string
)而是某种整数类型(例如int
),因此您需要先将数字转换为字符串:
std::stringstream ss;
ss << ClientID;
query.append(ss.str());
但您也可以使用operator+
(而不是append
):
query += ss.str();
【讨论】:
【参考方案4】:您将 ClientID
转换为 char* 导致函数假定它是一个空终止的 char 数组,但事实并非如此。
来自 cplusplus.com:
字符串& 附加 ( const char * s );附加形成的字符串的副本 由 s 指向的以空字符结尾的字符序列(C 字符串)。这 此字符序列的长度由第一次出现确定 一个空字符(由 traits.length(s) 确定)。
【讨论】:
好的,我明白了。那么如何在末尾追加一个整数值呢? 请参阅下面的@hmjd 答案.. 他已经涵盖了这个。以上是关于将 int 附加到 std::string [重复]的主要内容,如果未能解决你的问题,请参考以下文章
是否有一个 std::string 函数可以将空格附加到给定的缩进级别
如何在 C++ 中将 char 指针附加到 std::string
有没有一种简单的方法可以将前导零添加到通过 std::to_string(int) 创建的字符串中?