Bonjour,

Je suis sous linux, et j'utilise GCC ( gcc version 4.3.2 (Debian 4.3.2-1.1) )
J'ai remarqué un problème étrange en utilisant la classe string, de la STL.
Les deux lignes suivantes ne donnent pas le même résultat dans tous les cas :

cout << ma_string << endl;
cout << ma_string.c_str() << endl;

Ce n'est pas un problème d'affichage, car un parcours de la chaîne renvoyée par c_str() (via un pointeur sur caractère) me confirme qu'elle ne contient pas les mêmes données. En fait, elle est tronquée.


Voici, plus en détail, la chaine avec laquelle j'obtiens ce résultat :

INSERT INTO health.grp_data (entete_id, groupe_id, grp_data_numero_groupe, grp_data_data, grp_data_prestation_offset) VALUES (18002, 6, 1160, $$1160|000000000000|0|$$, 0) RETURNING grp_data_id

Quand je reste en mode "chaine C++", l'intégralité s'affiche.
Quand je passe en mode "chaine C", via c_str(), j'obtiens la chaine suivante :

INSERT INTO health.grp_data (entete_id, groupe_id, grp_data_numero_groupe, grp_data_data, grp_data_prestation_offset) VALUES (18002, 6, 1160, $$1160|


Comme vous pouvez le constater, elle se coupe, bizarrement, au début d'une suite de zéros. Se pourrait-il qu'elle soit interprétée, par erreur, comme une fin de chaîne par l'implémentation ?
Est-ce un problème connu ? Généralisé ?
Y'a-t'il une solution simple qui me permettrait d'éviter ce genre de problèmes ? (remplacer toutes les "string" par des objets d'une classe maison est difficilement envisageable, vu la taille de notre projet...)


Merci par avance pour vos réponses.