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