Heim  >  Artikel  >  Backend-Entwicklung  >  Warum führt das direkte Anhängen einer Ganzzahl an einen std::string dazu, dass eine Debug-Assertion fehlschlägt?

Warum führt das direkte Anhängen einer Ganzzahl an einen std::string dazu, dass eine Debug-Assertion fehlschlägt?

Barbara Streisand
Barbara StreisandOriginal
2024-11-10 10:19:02296Durchsuche

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

Anhängen einer Ganzzahl an einen std::string: Warum die Behauptung fehlschlägt

In C, wenn versucht wird, einen ganzzahligen Wert direkt an anzuhängen ein std::string wie unten gezeigt:

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

Sie können auf einen Debug Assertion Fail stoßen. Dies liegt daran, dass die Methode std::string::append() erfordert, dass ihr Argument eine NULL-terminierte Zeichenfolge (char*) ist. Die Übergabe einer Ganzzahl als Zeiger auf ein Zeichenarray ohne Abschluss mit einem Nullzeichen führt jedoch zu undefiniertem Verhalten und möglicherweise zu einem Absturz.

Um eine Ganzzahl korrekt an einen std::string anzuhängen, gibt es mehrere Ansätze verfügbar:

1. Mit std::ostringstream:

#include <sstream>

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

Diese Methode erstellt ein Stringstream-Objekt, fügt den Text und den ganzzahligen Wert darin ein und ruft die resultierende Zeichenfolge ab.

2. Verwendung von std::to_string (C 11):

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

Dieser Ansatz verwendet die Funktion std::to_string, um die Ganzzahl in einen String umzuwandeln und führt dann die Verkettung durch.

3. Verwenden von boost::lexical_cast:

#include <boost/lexical_cast.hpp>

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

Diese Methode nutzt die lexical_cast-Funktion der Boost-Bibliothek, um die Ganzzahl in eine Zeichenfolge umzuwandeln und die Verkettung durchzuführen.

Das obige ist der detaillierte Inhalt vonWarum führt das direkte Anhängen einer Ganzzahl an einen std::string dazu, dass eine Debug-Assertion fehlschlägt?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn