En comparant à une chaîne codée en dur avec des citations en C++

Je suis en train d'écrire une fonction c++ pour générer des données XML à l'aide de TinyXML. J'aimerais vérifier qu'une (petite) de l'arbre produit par ma fonction est transformé en une chaîne identique à une chaîne de référence.

//intended XML:
<element type="correct" />

Il semble que la meilleure façon de faire de cette comparaison est de coder en dur la chaîne de référence dans le code:

//assignment
std::string intended = "<element type=\"correct\" />";

Toutefois, les barres obliques inverses pour échapper les guillemets éviter la comparaison de réussir.

#include <tinyxml.h>
#include <string.h>
TiXmlElement test = TiXmlElement("element");
test.SetAttribute("type", "correct");
TiXmlPrinter printer;
test.Accept(&printer);
ASSERT_EQ(intended, printer.CStr()); //gtests macro

de sortie:

Value of: printer.CStr()
Actual: "<element type="correct" />"
Expected: intended
Which is: "<element type=\"correct\" />"
Les barres obliques inverses ne sera pas de la partie de la chaîne avec le code vous ai montré ici. Autre chose doit se passer. ideone.com/3H9PB7
Vous pourriez essayer de printf() (ou quelque chose de similaire) la valeur de printer.CStr() dans une autre variable (ou flux) pour voir si elle obtient ensuite correctement mis en forme pour correspondre à votre cas de test.
Peut-être les chaînes de caractères sont codés différemment. Essayez de la sortie boths des chaînes de caractères (c'est à dire en utilisant std::cout), de sorte que vous pouvez voir exactement ce que printer.CStr() et intended ressembler.
Les chaînes ne se comparent égales si elles ont un nombre différent d'espaces, l'un contient un '\t' où l'autre a un simple ' ', ou si on finit dans '\n' et l'autre ne l'est pas.

OriginalL'auteur tasteslikelemons | 2014-03-12