On 30 avr, 23:36, "Eric.Malenf...@
gmail.com"
gmail.com> wrote:
> On Apr 30, 4:29 pm, p-fifty-fi...@
hotmail.com wrote:
> [snip]
>
>
>
>> template class BasicHourOFacet
>> : public std::time_put
>> {
> [snip]
>> /* Data member */
>> const char_type *myFormat;
>
>> };
> [snip]
>
>> template
>> BasicHourOFacet::BasicHourOFacet(const char_type *Format,
>> size_t R) :
>> std::time_put(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
>> std::basic_string BasicHourOFacet::ToString(const
>> tm_type &Me) const
>> {
>> std::basic_ostringstream 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