Re: Problème avec les facets - Pour les heures
On 30 avr, 23:36, "Eric.Malenf...@gmail.com"
<Eric.Malenf...@gmail.com> wrote:
> On Apr 30, 4:29 pm, p-fifty-fi...@hotmail.com wrote:
> [snip]
>
>
>
> > template<typename CharT> class BasicHourOFacet
> > : public std::time_put<CharT>
> > {
> [snip]
> > /* Data member */
> > const char_type *myFormat;
>
> > };
> [snip]
>
> > template<typename CharT>
> > BasicHourOFacet<CharT>::BasicHourOFacet(const char_type *Format,
> > size_t R) :
> > std::time_put<char_type>(R),
> > myFormat (Format)
> > {}
>
> Ceci est fragile: En ne compiant que le pointeur, il faut que le
> Format passé par le créateur de la Facet reste alloué tant que la
> Facet existe.
>
> > template<typename CharT>
> > std::basic_string<CharT> BasicHourOFacet<CharT>::ToString(const
> > tm_type &Me) const
> > {
> > std::basic_ostringstream<char_type> Oss;
>
> > put(Oss, Oss, Oss.fill(), &Me, myFormat, myFormat +
> > sizeof(myFormat));
>
> sizeof(myFormat) == sizeof (char*) != strlen(myFormat).
>
> > Plus precisement ca vient du "%H %M %S", seul les quatres premiers
> > caracteres sont "pris" (càd "%H %"), et je ne comprends pas pourquoi
>
> Si, sur ta plateforme, tu as des pointeurs de 4 bytes,
> sizeof(myFormat) == 4. Le dernier paramètre passé a put() dans
> ToString() pointe donc au 4e caractère de "%H %M %S" et put() ne
> "voit" donc que "%H %"
en effet c'etais ca, erreur stupide de ma part, merci
|