Heim  >  Artikel  >  Backend-Entwicklung  >  Warum führt das Anhängen einer Ganzzahl an einen String in C zu einem Assertionsfehler?

Warum führt das Anhängen einer Ganzzahl an einen String in C zu einem Assertionsfehler?

Susan Sarandon
Susan SarandonOriginal
2024-11-11 11:04:03554Durchsuche

Why Does Appending an Integer to a String in C   Cause an Assertion Failure?

Anhängen einer Ganzzahl an eine Zeichenfolge in C: Fehlerbehebung bei Assertionsfehlern

Betrachten Sie den folgenden Code, der versucht, eine Ganzzahl an eine Zeichenfolge anzuhängen:

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

Dieser Code löst jedoch einen Debug Assertion Failure aus. Um zu verstehen, warum, müssen wir das erwartete Verhalten von std::string::append() untersuchen.

std::string::append() benötigt ein char*-Argument, das mit NULL terminiert sein sollte Zeichenfolge im C-Stil. In unserem Fall übergeben wir jedoch einen Rohzeiger auf die Ganzzahl ClientID, die keine NULL-terminierte Zeichenfolge ist.

Lösungsansätze

Um eine anzuhängen Wenn Sie in C eine Ganzzahl in einen String konvertieren möchten, haben Sie mehrere Möglichkeiten:

1. std::ostringstream

#include <sstream>

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

2. std::to_string (C 11 und höher)

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

3. Boost::lexical_cast

#include <boost/lexical_cast.hpp>

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

Bei jedem dieser Ansätze wird die ganzzahlige ClientID korrekt in eine Zeichenfolge konvertiert und an die Basiszeichenfolge angehängt, wodurch eine gültige Zeichenfolge erzeugt wird, ohne dass ein Assertionsfehler ausgelöst wird.

Das obige ist der detaillierte Inhalt vonWarum führt das Anhängen einer Ganzzahl an einen String in C zu einem Assertionsfehler?. 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