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

 


 Mot :   Pseudo :  
 
 Page :   1  2  3
Page Suivante
Auteur Sujet :

petyte question C++ (istringstream, copie, toussa) VS2003 / pubsetbuf

n°1257916
chrisbk
-
Posté le 03-12-2005 à 00:41:39  profilanswer
 

Reprise du message précédent :
ouais le taf c'est un sacré tue-projet-perso [:pingouino]

mood
Publicité
Posté le 03-12-2005 à 00:41:39  profilanswer
 

n°1257917
chrisbk
-
Posté le 03-12-2005 à 00:42:28  profilanswer
 

houla [:pingouino] t'es encore tombé sur un beau truc toi [:god]

n°1257918
bjone
Insert booze to continue
Posté le 03-12-2005 à 00:42:55  profilanswer
 

la vie serait tellement plus simple si on avait pas à bouffer, comme ça pas besoin de taffer pour bouffer, et si y'a des prises secteurs dans la rue, on peu coder dans une boite a carton...
 
"bonjour vous êtes sdf ?"
- non je suis developpeur freelance"
 
enfin la vie tout ça quoi...

n°1257919
bjone
Insert booze to continue
Posté le 03-12-2005 à 00:44:38  profilanswer
 

chrisbk a écrit :

houla [:pingouino] t'es encore tombé sur un beau truc toi [:god]


 
ha non mais y'a des trucs surrealistes, le pire c'est qu'on vends les softs à je sais pas combien de K€ :D
mais on a pas de concurrents hahahaha

n°1257920
chrisbk
-
Posté le 03-12-2005 à 00:49:46  profilanswer
 

oué enfin vu que t'es obligé de patauger dans le caca pour ce faire .....
 
c'est des softs de quoi ?

n°1257921
bjone
Insert booze to continue
Posté le 03-12-2005 à 00:52:29  profilanswer
 

de simulation approximative (mais suffisante) pour former des techniciens dans un milieu spécifique. (je peux pas plus préciser, avec google faut faire gaffe)

n°1257923
bjone
Insert booze to continue
Posté le 03-12-2005 à 00:53:38  profilanswer
 

mais le truc marche mine de rien et remplit sa fonction :D

n°1257924
bjone
Insert booze to continue
Posté le 03-12-2005 à 00:55:52  profilanswer
 

bon aller a deminche  :sleep: (faudrait ptet renommer le topic blabla@chrisbk)

n°1259437
++fab
victime du syndrome IH
Posté le 05-12-2005 à 19:21:55  profilanswer
 

bk> bon, j'ai un élément de réponse. Il était une fois la bibliothèque classic IOsteams. Celle-ci était quelque peu différente de l'actuelle standard IOStreams. Entre autre, on pouvait appeler pubsetbuf, et lui passer un buffer. Cette fonctionnalité n'a pas été standardisé, car la durée de vie du buffer que l'on fournissait était sujet à erreurs. Cette fonction a été maintenu quand même, et seul l'appel à pubsetbuf(0,0) a un comportement défini par la norme, aussi bien dans basic_stringbuf que dans basic_filebuf (contrairement à ce que j'ai eu dit). Tout autre appel est implementation defined.
 
au fait, sans le passage par std::string ? Eventuellement en faisant un prétraitement sur s :
char const* s = "pouet pouet";
std::istringstream( s );
 
tu ne peux pas faire mieux, la copie de s dans le buffer interne du istringstream est requise, pour éviter les erreurs encore une fois. Sauf erreurs, c'était différent dans classic IOStreams et ses strstream, et falait le permis de conduire pour s'en servir.

n°1259480
Elmoricq
Modérateur
Posté le 05-12-2005 à 20:26:37  profilanswer
 

Ce genre de fonction conservée pour compatibilité, surtout que rien n'est défini dans la norme, et donc qu'elle ne sert à rien pratiquement... Elle n'aurait pas dû être notée comme dépréciée ?
:??:

Message cité 1 fois
Message édité par Elmoricq le 05-12-2005 à 20:27:00
mood
Publicité
Posté le 05-12-2005 à 20:26:37  profilanswer
 

n°1259504
++fab
victime du syndrome IH
Posté le 05-12-2005 à 20:50:04  profilanswer
 

Elmoricq a écrit :

Ce genre de fonction conservée pour compatibilité, surtout que rien n'est défini dans la norme, et donc qu'elle ne sert à rien pratiquement... Elle n'aurait pas dû être notée comme dépréciée ?
:??:


 
difficile de déprécier seulement les appels de pubsetbuf(x,y) avec x != 0 || y != 0. Apparemment, ils ont choisi d'en confier la resposabilité à l'implémentation. ça casse du code, donc on peut comprendre. Mais je trouve ça moyen aussi :/

n°1259514
chrisbk
-
Posté le 05-12-2005 à 21:02:10  profilanswer
 

++fab a écrit :

bk> bon, j'ai un élément de réponse. Il était une fois la bibliothèque classic IOsteams. Celle-ci était quelque peu différente de l'actuelle standard IOStreams. Entre autre, on pouvait appeler pubsetbuf, et lui passer un buffer. Cette fonctionnalité n'a pas été standardisé, car la durée de vie du buffer que l'on fournissait était sujet à erreurs. Cette fonction a été maintenu quand même, et seul l'appel à pubsetbuf(0,0) a un comportement défini par la norme, aussi bien dans basic_stringbuf que dans basic_filebuf (contrairement à ce que j'ai eu dit). Tout autre appel est implementation defined.
 
au fait, sans le passage par std::string ? Eventuellement en faisant un prétraitement sur s :
char const* s = "pouet pouet";
std::istringstream( s );
 
tu ne peux pas faire mieux, la copie de s dans le buffer interne du istringstream est requise, pour éviter les erreurs encore une fois. Sauf erreurs, c'était différent dans classic IOStreams et ses strstream, et falait le permis de conduire pour s'en servir.


 
 
alors mon pb c'est que c'est pas du texte que je mets dans mon istringstream, mais du binaire. donc j'utilise le constructeur std::string(const char *, size_t size) (ou dans le gout). J'ai donc peur de me taper une double copie (char => string => buffer interne)
 
merci pour les precisions !

n°1259515
chrisbk
-
Posté le 05-12-2005 à 21:02:41  profilanswer
 

++fab a écrit :

difficile de déprécier seulement les appels de pubsetbuf(x,y) avec x != 0 || y != 0. Apparemment, ils ont choisi d'en confier la resposabilité à l'implémentation. ça casse du code, donc on peut comprendre. Mais je trouve ça moyen aussi :/


 
de l'autre coté c'est super dangeureux car completement silencieux a la compilation :/

n°1259573
KangOl
Profil : pointeur
Posté le 05-12-2005 à 21:49:15  profilanswer
 

++fab a écrit :

bk> bon, j'ai un élément de réponse. Il était une fois la bibliothèque classic IOsteams. Celle-ci était quelque peu différente de l'actuelle standard IOStreams. Entre autre, on pouvait appeler pubsetbuf, et lui passer un buffer. Cette fonctionnalité n'a pas été standardisé, car la durée de vie du buffer que l'on fournissait était sujet à erreurs. Cette fonction a été maintenu quand même, et seul l'appel à pubsetbuf(0,0) a un comportement défini par la norme, aussi bien dans basic_stringbuf que dans basic_filebuf (contrairement à ce que j'ai eu dit). Tout autre appel est implementation defined.
 
au fait, sans le passage par std::string ? Eventuellement en faisant un prétraitement sur s :
char const* s = "pouet pouet";
std::istringstream( s );
 
tu ne peux pas faire mieux, la copie de s dans le buffer interne du istringstream est requise, pour éviter les erreurs encore une fois. Sauf erreurs, c'était différent dans classic IOStreams et ses strstream, et falait le permis de conduire pour s'en servir.


sauf dans le stlport de borland : setbuf(0,0) ne fait rien du tout :/

// According to the C++ standard the effects of setbuf are implementation
// defined, except that setbuf(0, 0) has no effect.  In this implementation,
// setbuf(<anything>, n), for n > 0, calls reserve(n) on the underlying
// string.


chrisbk a écrit :

alors mon pb c'est que c'est pas du texte que je mets dans mon istringstream, mais du binaire. donc j'utilise le constructeur std::string(const char *, size_t size) (ou dans le gout). J'ai donc peur de me taper une double copie (char => string => buffer interne)
 
merci pour les precisions !


 
manipuler le buffer d'un stream n'est pas une bonne idée...  
tu es sur que le stream est vraiment le meilleur objet pour faire ce que tu dois faire ?
personnellement, j'utilise a présent un std::deque<char> couplé avec std::copy pour le copier dans un stream


---------------
Nos estans firs di nosse pitite patreye...
n°1259581
++fab
victime du syndrome IH
Posté le 05-12-2005 à 21:56:31  profilanswer
 

KangOl a écrit :

sauf dans le stlport de borland : setbuf(0,0) ne fait rien du tout :/

// According to the C++ standard the effects of setbuf are implementation
// defined, except that setbuf(0, 0) has no effect.  In this implementation,
// setbuf(<anything>, n), for n > 0, calls reserve(n) on the underlying
// string.




 
tu dois parler de basic_stringbuf, comme dit en première page, la norme garanti que basic_stringbuf::setbuf(0,0) soit sans effets.
 

n°1259584
chrisbk
-
Posté le 05-12-2005 à 21:59:02  profilanswer
 

KangOl a écrit :


tu es sur que le stream est vraiment le meilleur objet pour faire ce que tu dois faire ?
personnellement, j'utilise a présent un std::deque<char> couplé avec std::copy pour le copier dans un stream


 
 
?
 
bin ouais, vu que derriere j'ai des fonctions qui attendent un istream (ifstream, istringstream, whatever)

n°1259593
KangOl
Profil : pointeur
Posté le 05-12-2005 à 22:04:19  profilanswer
 

++fab a écrit :

tu dois parler de basic_stringbuf, comme dit en première page, la norme garanti que basic_stringbuf::setbuf(0,0) soit sans effets.


effectivement, j'ai encore mal traduit except :pfff:  
 
bon oubliez ce que j'ai dit a propos de setbuf...
 
ps : saleté de wifi  :fou:


---------------
Nos estans firs di nosse pitite patreye...
n°1269239
chrisbk
-
Posté le 17-12-2005 à 23:02:55  profilanswer
 

heuh chui ptet pas reveillé, mais pourquoi ce machin la ne m'affiche pas "0" ?

Code :
  1. std::istringstream st(std::string("prout" ),std::ios::in|std::ios::binary);
  2.  std::cout<<"pos : "<<st.tellg()<<std::endl;


 
(gcc 2.95)

n°1269246
el muchach​o
Comfortably Numb
Posté le 17-12-2005 à 23:24:05  profilanswer
 

Au fait, je me rappelle que la STL définit les ropes.

Citation :

Ropes are a scalable string implementation: they are designed for efficient operation that involve the string as a whole. Operations such as assignment, concatenation, and substring take time that is nearly independent of the length of the string. Unlike C strings, ropes are a reasonable representation for very long strings such as edit buffers or mail messages.

n°1269249
chrisbk
-
Posté le 17-12-2005 à 23:24:34  profilanswer
 

certes, mais c'est pas la question [:petrus75]

n°1269260
push
/dev/random
Posté le 17-12-2005 à 23:32:15  profilanswer
 

ça sent la choucroute à mon avis

n°1269262
el muchach​o
Comfortably Numb
Posté le 17-12-2005 à 23:33:23  profilanswer
 

En fait, c'est seulement une extension SGI. Il me semblait que GNU l'implémentait aussi, mais je n'en suis pas sûr.

n°1269265
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 17-12-2005 à 23:34:53  profilanswer
 

ça marche nickel sous VS 2005 [:kbchris]
 

Code :
  1. #include <iostream>
  2. #include <sstream>
  3. #include <string>
  4.  
  5. int main(void)
  6. {
  7.     std::istringstream st(std::string("prout" ),std::ios::in|std::ios::binary);
  8.     std::cout<<"pos : "<<st.tellg()<<std::endl;
  9. }


 

Citation :


pos : 0

n°1269267
push
/dev/random
Posté le 17-12-2005 à 23:36:42  profilanswer
 

ça va l'aider beaucoup ça [:mlc]

n°1269273
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 17-12-2005 à 23:40:23  profilanswer
 

push a écrit :

ça va l'aider beaucoup ça [:mlc]


ça va au moins lui montrer que ce n'est pas une erreur de sa part, mais qu'il utilise un compilo pourri :o

n°1269275
chrisbk
-
Posté le 17-12-2005 à 23:40:32  profilanswer
 

bin toi au lieu de poster du mlc, installe gcc2.95 sur ton nux, et essaye [:mlc] (ca marche avec gcc 3.x et 4.0, jpige pas trop [:pingouino])

n°1269276
chrisbk
-
Posté le 17-12-2005 à 23:40:58  profilanswer
 

Harkonnen a écrit :

ça va au moins lui montrer que ce n'est pas une erreur de sa part, mais qu'il utilise un compilo pourri :o


 
nan mais ca je sais [:el g]
 
au fait y'a des changements dans le compilo C++ de vs 2005 ?

n°1269280
chrisbk
-
Posté le 17-12-2005 à 23:43:37  profilanswer
 

tiens bin harko, t'avais pas installé un gcc 2.95 y'a pas longtemps sur une VM ? tu pourrais regarder, paske j'ai un doute sur mon install...

n°1269292
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 17-12-2005 à 23:50:21  profilanswer
 


root@ubuntu:/home/harkonnen # /usr/bin/gcc-2.95 test.cpp -o test
test.cpp:1: iostream: No such file or directory
test.cpp:2: string: No such file or directory


j'crois que j'ai une merde dans mon install également [:el g]

Message cité 1 fois
Message édité par Harkonnen le 17-12-2005 à 23:50:40
n°1269301
chrisbk
-
Posté le 17-12-2005 à 23:54:07  profilanswer
 

lol [:pingouino] moi j'ai l'impression qu'il cherche les header de la std de gcc 3.0, donc jme demande si ca couille pas la [:el g]

n°1269304
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 17-12-2005 à 23:55:59  profilanswer
 

ben vu que moi je semble avoir un problème de headers également, j'ai un doute sur la cohabitation entre 2.95 et 3.0


---------------
J'ai un string dans l'array (Paris Hilton)
n°1269306
chrisbk
-
Posté le 17-12-2005 à 23:56:31  profilanswer
 

monde de merde [:el g]

n°1269327
ory
Posté le 18-12-2005 à 00:15:04  profilanswer
 

Code :
  1. $ g++-2.95 wxqs.cpp -o wxqs
  2. $ ./wxqs
  3. pos : 134542640

n°1269330
ory
Posté le 18-12-2005 à 00:15:57  profilanswer
 

Harkonnen a écrit :

ben vu que moi je semble avoir un problème de headers également, j'ai un doute sur la cohabitation entre 2.95 et 3.0


 
si la distri utilise un système de paquets et que c'est fait proprement, pas de problèmes.
 

n°1269331
chrisbk
-
Posté le 18-12-2005 à 00:16:05  profilanswer
 

[:el g] j'ai la meme merde
c'est quoi ce delire ?
 
(merci btw)


Message édité par chrisbk le 18-12-2005 à 00:16:44
n°1269332
ory
Posté le 18-12-2005 à 00:17:33  profilanswer
 

Harkonnen a écrit :


root@ubuntu:/home/harkonnen # /usr/bin/gcc-2.95 test.cpp -o test
test.cpp:1: iostream: No such file or directory
test.cpp:2: string: No such file or directory


j'crois que j'ai une merde dans mon install également [:el g]


 
g++  :o

n°1269336
chrisbk
-
Posté le 18-12-2005 à 00:24:55  profilanswer
 

The 2.95 series of the compiler is no longer developed.  If you do not
want to be told to switch to a current g++ (2.95.3 is obsolete since
June 2001, i.e. *2* *years* ago), you may want to have a look to the
source code and fix the problem yourself.  
 
 
k, lol.

n°1269339
push
/dev/random
Posté le 18-12-2005 à 00:30:04  profilanswer
 

J'étais tombé dessus aussi celui là  [:god]  
 
si tu fais un st.seekg (0, std::ios::beg); avant affichage ça change quelque chose ?

n°1269345
chrisbk
-
Posté le 18-12-2005 à 00:34:56  profilanswer
 

push a écrit :

J'étais tombé dessus aussi celui là  [:god]  
 
si tu fais un st.seekg (0, std::ios::beg); avant affichage ça change quelque chose ?


 
nan, ca chie des glacons pareil. Par contre le resultat a l'air faux, mais coherent, autrement dit si tu veux avoir la taille du fichier tu fais  
 

Code :
  1. int machin = str.tellg();
  2. str.seekg(0,std::ios::end);
  3. int taille = str.tellg() - machin ;


 
 
m'enfin c'est merdique. Les fstream fonctionnent correctement, eux


Message édité par chrisbk le 18-12-2005 à 00:35:14
n°1269353
push
/dev/random
Posté le 18-12-2005 à 01:09:33  profilanswer
 

mouais, moi j'abandonne
 
j'ai trouvé ça sinon  
 
En fait, la norme évite soigneusement à dire ce que peut être ou ne
pas peut être le type de streampos. Ce qui a fait l'objet du DR 6. En
somme, la norme est claire, et c'est simplement moi qui est trop idiot
pour la comprendre. (Apparamment, Matt Austern l'a pas trouvée assez
claire non plus, et dans son commentaire, il a l'air d'impliquer que
Jerry [Schwarz -- auteur des iostream chez AT&T] non plus. Alors, je
me sens pas trop mauvais.) Si on prend la réponse du comité
littéralement, streampos serait typiquement un fpos_t avec des
opérateurs en plus. Et selon la norme C, un fpos_t, c'est de la magie.

 
James Kanze
 
La norme C++ est affreusement imprécis en ce qui concerne streampos et
streamoff. Ce n'est donc pas toujours très clair ce qui doit
fonctionner, et ce qui n'est pas garanti. J'imagine que dans la
pratique, streampos va toujours donner les garanties de fpos_t en C,
et streamoff va toujours être un type entier (parce que
fonctionnellement, il correspond au long passé à lseek en C). Mais en
C, fpos_t est un type transparent -- l'utilisateur ne peut pas
l'initialiser, on ne peut pas le créer à partir d'un int, etc. C++
exige d'opérateurs supplémentaires, sans vraiment définir leur
sémantique.
 
Faute d'autres précisions, je programme comme si j'avais les garanties
de C pour ces deux types, c-à-d :
 
  - Je ne compte pas sur la capabilité de convertir streampos en
    entier, ni sur la sémantique de la conversion d'un entier en
    streampos. Pour moi, streampos est un type transparent, un « magic
    cookie » dont la structure et la signification ne sont connues que
    de l'implémentation. Je n'utilise que des streampos qui m'ont été
    rétournés par des fonctions de positionnement.
 
  - Si je veux positionner quelque part sans l'avoir forcemment visité
    (et en avoir mémorisé le streampos) avant, j'utilise le forme de
    seek qui prend un streamoff et un seekdir. Et je ne compte que sur
    les garanties de lseek dans la norme C, c-à-d :
 
    binary :
        Fonctionne en général. En fait, les seek à ios::end ne sont
        pas garantis, mais dans la pratique, ils fonctionnent sur les
        machines qui m'interessent.
 
    text :
        Fonctionne seulement si le streamoff est 0. Donc, je peux me
        positionner au début ou à la fin, mais pas à un endroit
        arbitraire dans le fichier.
 
Enfin, je ne compterais même pas que le mode binary ait une
signification utile pour les flux autres que char.

 
James Kanze
 
http://groups.google.fr/group/fr.c [...] 206ac5834c

mood
Publicité
Posté le   profilanswer
 

 Page :   1  2  3
Page Suivante

Aller à :
Ajouter une réponse
 

Sujets relatifs
question sur switchQUESTION Accéder au Net depuis un intranet depuis VPN ????
Problème de Copie (StreamReader)Mode texte et question sur les socket.
[css] question idiote sur les listes.htaccess Comment protéger sont site contre la copie?
nombre max de copie caché lors d'un envoie de mail.[Résolu] POO question hype débutant
[resolu] Copie de feuilles ...[VBS] afficher l'animation de copie de fichier - [résolu]
Plus de sujets relatifs à : petyte question C++ (istringstream, copie, toussa) VS2003 / pubsetbuf


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)