Comportement de ostream& operator<<(ostream&, basic_string) - C++ - Programmation
Marsh Posté le 26-03-2003 à 12:51:45
essaye write(chaine.data(), chaine.size())
la deuxieme methode n'est donc pas bonne parce que strlen(chaine.c_str()) != chaine.size() si comme tu dis il y a des de 0 qui se promène.
Marsh Posté le 26-03-2003 à 13:07:59
++Taz a écrit : essaye write(chaine.data(), chaine.size()) |
Tout depend si on a le droit de mettre des '\0' dans une std::string. Malheureusement les bouquins sont pas la pour eclaicir sur ces points de detail...
Marsh Posté le 26-03-2003 à 13:11:39
kenshiro182 a écrit : |
\0 est un caractére comme les autres dans un string.
Marsh Posté le 26-03-2003 à 13:17:26
le stroustrup dit clairement qu'une chaine peut contenir un 0. (§20.3.7)
edit: notez bien que l'initialisation à partir de chaine littérale ne permet pas d'insérer des 0. par contre avec string::insert, on peut mettre de 0 partout.
Marsh Posté le 26-03-2003 à 12:03:55
Dans mon code (enfin non celui d'un collegue), je concatene un buffer recu d'une connection TCP a une std::string
Ce buffer peut contenir un caractere '\0'. Pensez vous que c'est mal de faire un "append" ? Y a-t-il un "contrat" dans le standard C++ qui precise que le parametre "pointe vers un tableau avec des caracteres non nuls" ?
Deuxiemement question: si je fais un
L'implementation differe entre Visual C++ et la libstdc++ (gcc). Le premier fait un
Le deuxieme fait un
Si il y a un caractere nul, ca change tout (enfin si il est valide d'en mettre un). Quel est a votre avis le comportement standard ? Savez vous ou recuperer des infos sur ces points precis du standard ?
Message édité par kenshiro182 le 26-03-2003 à 12:04:42