web-dev-qa-db-ja.com

intをstd :: stringに追加します

このコードでデバッグアサーションエラーが発生するのはなぜですか?

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

std::string::append() メソッドは、引数がNULLで終了する文字列(char*)であると想定しています。

stringを含むintを生成するには、いくつかのアプローチがあります。

  • 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));
    
195
hmjd

Intをchar *にキャストして文字列を取得することはできません。これを試して:

std::ostringstream sstream;
sstream << "select logged from login where id = " << ClientID;
std::string query = sstream.str();

文字列ストリーム参照

5
luke

ClientIDをchar *にキャストしているため、関数はnullで終了するchar配列を想定していますが、そうではありません。

cplusplus.comから:

string&append(const char * s); sが指すヌル終了文字シーケンス(C文字列)で形成された文字列のコピーを追加します。この文字シーケンスの長さは、null文字の最初の出現(traits.length(s)によって決定される)によって決定されます。

2
WeaselFox

あなたのClientIDは文字列型(ゼロで終了するchar*またはstd::string)ではなく、何らかの整数型(たとえばint)であると感じています。最初に文字列の番号:

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

ただし、_appendの代わりにoperator+も使用できます。

query += ss.str();
2
Bojan Komazec