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

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

Barbara Streisand
リリース: 2024-11-10 10:19:02
オリジナル
334 人が閲覧しました

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート