[C++] <string> tout bug !!!

Fermé
KX - 26 mai 2010 à 11:51
KX Messages postés 16754 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 - 26 mai 2010 à 18:37
Bonjour,

J'utilise des std::string, et peu importe ce que je fais, toutes les méthodes (à part c_str()) suppriment le contenu de ma chaîne.
C'est à dire que empty(), size(), length()... et toutes les autres suppriment la chaîne avant de faire le calcul, ce qui donne bien sûr des résultats aberrants !


Exemple de bug chez moi :

std::string s("bonjour");
bool b=s.empty(); // true !!!


J'arrive ponctuellement à contourner le problème, mais c'est moche !

std::string s("bonjour");
bool b=strlen(s.c_str())==0; // false...


Mais en plus d'être moche, je n'arrive pas à faire toujours de bidouille, en particulier avec un vector<std::string>, à chaque fois que je fais push_back, ça me rajoute une chaîne vide, et tout est faux après !

Je pense que ça vient d'une mauvaise configuration de Visual Studio 2008
Quelqu'un peut-il m'expliquer ce qui peux se passer ou sinon comment contourner le problème ?

Merci !
A voir également:

2 réponses

en mettant "\0" à la fin ?
0
KX Messages postés 16754 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 3 020
26 mai 2010 à 18:30
En fait quand on utilise std::string en C++ on ne manipule jamais de '\0' puisque la taille de la chaîne de caractère (et donc son caractère final) est toujours connu grâce à l'attribut privé _MySize (celui là même qui posait problème)

La manipulation de std::string en C++ est ainsi bien plus facile (du moins en théorie) que celle des char* en C et surtout plus sûre car il n'y a pas d'allocation de mémoire à faire manuellement,
0
KX Messages postés 16754 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 3 020
26 mai 2010 à 18:37
Bon j'ai trouvé, je ne sais pas trop pourquoi, mais après plusieurs manipulations avec mon objet std::string, l'attribut privé _MySize valait 0, alors que la chaîne _Buf était toujours correcte.

Du coup j'ai recréé un objet std::string directement avec le c_str() du premier et ça marche !
0