localtime question

Giorgos Keramidas keramida at ceid.upatras.gr
Wed Aug 11 02:42:55 PDT 2004


On 2004-08-11 10:44, Mipam <mipam at ibb.net> wrote:
> > You'd have to use strftime() and a local buffer for that.
>
> I found an example and adjusted it:
>
> #include <time.h>
> #include <stdio.h>
>
> int main()
> {
>     struct tm *ptr;
>     time_t tm;
>     char str[60];
>     char str2[60];
>     char str3[60];
>
>     tm = time(NULL)-86400;
>     ptr = localtime(&tm);
>     strftime(str ,100 , "%d",ptr);
>     strftime(str2 ,100 , "%m",ptr);
>     strftime(str3 ,100 , "%Y",ptr);
>     printf("%s %s %s\n",str3,str2,str);
>
>     return 0;
> }
>
> This runs just fine: 2004 08 10
> I dont know what the 100 is good for?

It's the size of the buffer that strftime() gets as the first argument.
In this case 100 is a bug waiting to happen, because the buffers are
allocated with only 60 bytes of data.  The manpage of strftime()
explains what each argument is supposed to be.

        $ man strftime

> I compiled both with: cc -O3 -mcpu=pentiumpro -o time time.c
> Both compile without errors.

Note that -O3 might be a it unsafe on FreeBSD.
Even -O2 is not always a good idea.



More information about the freebsd-questions mailing list