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
Susan Sarandonoriginal
2024-11-11 11:04:03631parcourir

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);

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());

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

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));

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:
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