ホームページ  >  記事  >  バックエンド開発  >  整数を std::string に直接追加するとデバッグ アサーションが失敗するのはなぜですか?

整数を std::string に直接追加するとデバッグ アサーションが失敗するのはなぜですか?

Barbara Streisand
Barbara Streisandオリジナル
2024-11-10 10:19:02271ブラウズ

Why Does Appending an Integer Directly to a std::string Lead to a Debug Assertion Fail?

整数を std::string に追加する: アサーションが失敗する理由

C で、整数値を std::string に直接追加しようとした場合見たとおりの std::string以下:

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

デバッグ アサーション エラーが発生する可能性があります。これは、 std::string::append() メソッドの引数が NULL で終了する文字列 (char*) である必要があるために発生します。ただし、整数を null 文字で終了せずに文字配列へのポインタとして渡すと、未定義の動作が発生し、クラッシュする可能性があります。

整数を std::string に正しく追加するには、いくつかの方法があります。利用可能:

1. std::ostringstream の使用:

#include <sstream>

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

このメソッドは stringstream オブジェクトを作成し、そこにテキストと整数値を挿入し、結果の文字列を取得します。

2. std::to_string の使用 (C 11):

std::string query("select logged from login where id = " +
                  std::to_string(ClientID));

このアプローチでは、std::to_string 関数を使用して整数を文字列に変換し、連結を実行します。

3. boost::lexical_cast の使用:

#include <boost/lexical_cast.hpp>

std::string query("select logged from login where id = " +
                  boost::lexical_cast<std::string>(ClientID));

このメソッドは、Boost ライブラリの lexical_cast 関数を利用して、整数を文字列に変換し、連結を実行します。

以上が整数を std::string に直接追加するとデバッグ アサーションが失敗するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。