Maison > développement back-end > C++ > le corps du texte

Pourquoi l'ajout d'un entier directement à un std::string entraîne-t-il l'échec d'une assertion de débogage ?

Barbara Streisand
Libérer: 2024-11-10 10:19:02
original
294 Les gens l'ont consulté

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

Ajouter un entier à une std::string : pourquoi l'assertion échoue

En C, lorsque vous tentez d'ajouter une valeur entière directement à une std::string comme indiqué ci-dessous :

std::string query;
int ClientID = 666;
query = "select logged from login where id = ";
query.append((char *)ClientID);
Copier après la connexion

vous pouvez rencontrer une assertion de débogage Échouer. Cela se produit car la méthode std::string::append() requiert que son argument soit une chaîne terminée par NULL (char*). Cependant, passer un entier comme pointeur vers un tableau de caractères sans le terminer par un caractère nul entraînera un comportement indéfini et potentiellement un crash.

Pour ajouter correctement un entier à un std::string, plusieurs approches sont disponible :

1. Utilisation de std::ostringstream :

#include <sstream>

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

Cette méthode crée un objet stringstream, y insère le texte et la valeur entière et récupère la chaîne résultante.

2. Utilisation de std::to_string (C 11) :

std::string query("select logged from login where id = " +
                  std::to_string(ClientID));
Copier après la connexion

Cette approche utilise la fonction std::to_string pour convertir l'entier en chaîne, puis effectue la concaténation.

3. Utilisation de boost::lexical_cast :

#include <boost/lexical_cast.hpp>

std::string query("select logged from login where id = " +
                  boost::lexical_cast<std::string>(ClientID));
Copier après la connexion

Cette méthode utilise la fonction lexical_cast de la bibliothèque Boost pour convertir l'entier en chaîne et effectuer la concaténation.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal