cin ne prend qu'un caractère sur deux

Le
fenkys
Bonjour,

Avant de donner plus de détail, je commence par donner un résumé car
j'ignore si le problème vient du C++ ou d'ailleurs.

J'ai donc un programme en fastcgi (qui utlise la libfcgi officielle) qui
récupère une chaine sur le flux d'entrée.

Lors de son activation, le programme détourne le flux d'entrée standard
et le flux de sortie vers un socket. Ma page web envoie une chaine de
caractère dans le socket et je lis le flux d'entrée que je place dans
une std::string au moyen d'un getline(std::cin, std::string &);

Chez moi en local ca marche impeccable. Mais sur le serveur web final,
ma string ne contient que les lettres de rang impair de la chaine de
départ.

Petite recherche sur google : neant. Mais autour de moi des gens
connaissent le problèmes, mais ne savent pas comment le résoudre.

A votre avis, dans quelle direction dois je cherche pour comprendre ce
qui se passe ?


Merci pour votre aide.


Laurent
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Fabien LE LEZ
Le #310289
On Thu, 02 Aug 2007 23:17:58 +0200, fenkys
Chez moi en local ca marche impeccable.


Avec la même version du même serveur web ?

Mais sur le serveur web final,
ma string ne contient que les lettres de rang impair de la chaine de
départ.


Une cause possible de ce symptôme est que ton programme s'attend à
lire des caractères sur 16 bits, alors qu'on lui passe des caractères
sur 8 bits.

fenkys
Le #310263
Fabien LE LEZ wrote:
On Thu, 02 Aug 2007 23:17:58 +0200, fenkys

Chez moi en local ca marche impeccable.



Avec la même version du même serveur web ?


Apache 2.2 sur le nouveau serveur, 2.0 sur mon serveur perso.


Mais sur le serveur web final,
ma string ne contient que les lettres de rang impair de la chaine de
départ.



Une cause possible de ce symptôme est que ton programme s'attend à
lire des caractères sur 16 bits, alors qu'on lui passe des caractères
sur 8 bits.


J'étais arrivé à cette conclusion. Mais je suis incapable d'aller plus
loin. Je ne sais pas si je dois agir sur le programme, la configuration
du serveur, ou encore ailleurs.


LD


fenkys
Le #310262
fenkys wrote:
Bonjour,

Avant de donner plus de détail, je commence par donner un résumé car
j'ignore si le problème vient du C++ ou d'ailleurs.

J'ai donc un programme en fastcgi (qui utlise la libfcgi officielle) qui
récupère une chaine sur le flux d'entrée.

Lors de son activation, le programme détourne le flux d'entrée standard
et le flux de sortie vers un socket. Ma page web envoie une chaine de
caractère dans le socket et je lis le flux d'entrée que je place dans
une std::string au moyen d'un getline(std::cin, std::string &);

Chez moi en local ca marche impeccable. Mais sur le serveur web final,
ma string ne contient que les lettres de rang impair de la chaine de
départ.


J'ai trouvé un moyen de contourner le problème. J'utilise la fonction
int istream::get() pour lire le flux entrant caractère par caractère. Et
je lis maintenant toutes les lettres.

Reste que je ne comprend pas ce qui se passe avec les getlines (je mets
au pluriel car toutes les versions de getline on le même problème).

A+

LD

James Kanze
Le #310258
On Aug 4, 6:00 pm, fenkys
[...]
J'ai trouvé un moyen de contourner le problème. J'utilise la fonction
int istream::get() pour lire le flux entrant caractère par caractère. Et
je lis maintenant toutes les lettres.

Reste que je ne comprend pas ce qui se passe avec les getlines (je mets
au pluriel car toutes les versions de getline on le même problème).


D'autant plus que getline doit se servir de istream::get(), ou de son
equivalent.

--
James Kanze (GABI Software) email:james.kanze:gmail.com
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34

Publicité
Poster une réponse
Anonyme