Heim > Artikel > Backend-Entwicklung > Warum führt das Anhängen einer Ganzzahl an einen String in C zu einem Assertionsfehler?
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!