Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1299 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  Comportement de ostream& operator<<(ostream&, basic_string)

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Comportement de ostream& operator<<(ostream&, basic_string)

n°343703
kenshiro18​2
Posté le 26-03-2003 à 12:03:55  profilanswer
 

Dans mon code (enfin non celui d'un collegue), je concatene un buffer recu d'une connection TCP a une std::string
 

Code :
  1. std::string chaine;
  2. // ...
  3. chaine.append(rcv_buffer, rcv_len);


 
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  
 

Code :
  1. std::cout << chaine;


 
L'implementation differe entre Visual C++ et la libstdc++ (gcc). Le premier fait un
 

Code :
  1. std::cout << chaine.c_str();


 
Le deuxieme fait un

Code :
  1. std::cout.write(chaine.c_str(), chaine.size());


 
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
mood
Publicité
Posté le 26-03-2003 à 12:03:55  profilanswer
 

n°343736
Taz
bisounours-codeur
Posté le 26-03-2003 à 12:51:45  profilanswer
 

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.


Message édité par Taz le 26-03-2003 à 13:22:07
n°343749
kenshiro18​2
Posté le 26-03-2003 à 13:07:59  profilanswer
 

++Taz a écrit :

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


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

n°343751
gloop
Posté le 26-03-2003 à 13:11:39  profilanswer
 

kenshiro182 a écrit :


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


\0 est un caractére comme les autres dans un string.

n°343760
Taz
bisounours-codeur
Posté le 26-03-2003 à 13:17:26  profilanswer
 

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.


Message édité par Taz le 26-03-2003 à 13:25:03

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  Comportement de ostream& operator<<(ostream&, basic_string)

 

Sujets relatifs
Couper un string avec des délimiteurs[java] un petit pb entre String et Byte
string et replace tt les ocurencestrstr donne un pointeur, mais j'aimerai un(e) string =)
[FAQ VB] La FAQ Visual Basic 6.0[BASIC] comment "dérouler" les GOTO ???
Mysql et Visual Basic 6.0 - Connecter les 2 ?[C]condition string qui marche pas !
[BASIC] Exporter une donnée de la base de registre[HELP] turbo basic :p
Plus de sujets relatifs à : Comportement de ostream& operator<<(ostream&, basic_string)


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR