[C++] <string> tout bug !!!
KX
-
KX Messages postés 19031 Statut Modérateur -
KX Messages postés 19031 Statut Modérateur -
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 !
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 !
2 réponses
-
-
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,
-
-
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 !