78

このコードで Debug Assertion Fail が発生するのはなぜですか?

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

4 に答える 4

220

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

stringanを含むを生成するには、いくつかの方法があります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));
    
于 2012-05-09T12:40:35.330 に答える
8

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

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

文字列ストリーム参照

于 2012-05-09T12:41:24.643 に答える
4

あなたClientIDは文字列型 (ゼロで終わるchar*or std::string) ではなく、整数型 (例えばint) であると感じているので、最初に数値を文字列に変換する必要があります:

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

operator+ただし、(の代わりにappend)次のように使用することもできます。

query += ss.str();
于 2012-05-09T12:43:55.440 に答える
2

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

cplusplus.comから:

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

于 2012-05-09T12:39:32.433 に答える