Maison > développement back-end > C++ > Pourquoi l'ajout d'un entier à une chaîne en C provoque-t-il un échec d'assertion ?

Pourquoi l'ajout d'un entier à une chaîne en C provoque-t-il un échec d'assertion ?

Susan Sarandon
Libérer: 2024-11-11 11:04:03
original
650 Les gens l'ont consulté

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

Ajout d'un entier à une chaîne en C : Dépannage d'un échec d'assertion

Considérez le code suivant qui tente d'ajouter un entier à une chaîne :

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

Cependant, ce code déclenche un échec d'assertion de débogage. Pour comprendre pourquoi, nous devons examiner le comportement attendu de std::string::append().

std::string::append() prend un argument char*, qui doit être terminé par NULL. Chaîne de style C. Cependant, dans notre cas, nous transmettons un pointeur brut vers l'entier ClientID, qui n'est pas une chaîne terminée par NULL.

Approches de solution

Pour ajouter un entier en chaîne en C , vous avez plusieurs options :

1. 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

2. std::to_string (C 11 et versions ultérieures)

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

3. 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

Chacune de ces approches convertira correctement l'entier ClientID en chaîne et l'ajoutera à la chaîne de base, produisant une chaîne valide sans déclencher d'échec d'assertion.

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!

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