このコードでデバッグアサーションエラーが発生するのはなぜですか?
std::string query;
int ClientID = 666;
query = "select logged from login where id = ";
query.append((char *)ClientID);
std::string::append()
メソッドは、引数がNULLで終了する文字列(char*
)であると想定しています。
string
を含むint
を生成するには、いくつかのアプローチがあります。
#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));
#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 *にキャストしているため、関数はnullで終了するchar配列を想定していますが、そうではありません。
cplusplus.comから:
string&append(const char * s); sが指すヌル終了文字シーケンス(C文字列)で形成された文字列のコピーを追加します。この文字シーケンスの長さは、null文字の最初の出現(traits.length(s)によって決定される)によって決定されます。
あなたのClientID
は文字列型(ゼロで終了するchar*
またはstd::string
)ではなく、何らかの整数型(たとえばint
)であると感じています。最初に文字列の番号:
std::stringstream ss;
ss << ClientID;
query.append(ss.str());
ただし、_append
の代わりにoperator+
も使用できます。
query += ss.str();