Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 10 Aug 2004 18:45:19 +0200 (MEST)
From:      Mipam <mipam@ibb.net>
To:        Giorgos Keramidas <keramida@ceid.upatras.gr>
Cc:        freebsd-questions@freebsd.org
Subject:   Re: localtime question
Message-ID:  <Pine.BSO.4.56.0408101842210.21307@ux11.ltcm.net>
In-Reply-To: <20040810162612.GC25389@orion.daedalusnetworks.priv>
References:  <Pine.BSO.4.56.0408101646230.26666@ux11.ltcm.net> <20040810162612.GC25389@orion.daedalusnetworks.priv>

next in thread | previous in thread | raw e-mail | index | archive | help
> Note that it's a good idea to explicitly specify that main() does
> nothing to its argument with:
> 
>         int
>         main(void)
>         {
>                 ...
>         }
> 
> and that main() has to `return' some value that fits in an `int' as its
> definition says it should.
> 
> > But at compilation it complains:
> >
> > tijd.c: In function `main':
> > tijd.c:15: warning: passing arg 1 of `ctime' makes pointer from integer without a cast
> >
> > What am i doing wrong?
> 
> You're passing the "value" of tv.tv_sec in a function that expects a
> pointer to it.
> 
>         % man ctime
> 
>              char *
>              ctime(const time_t *clock);
> 
> The value you passed to ctime() is not an address of a constant time_t
> object but the value of the time_t object itself.  The compiler detects
> that a conversion from an integral type to a pointer needs to take place
> and warns you about it.
> 
> This is not a fatal error (c.f. the rationale of the ANSI C99 standard,
> which specifies that pointers might be converted to integral values and
> back to the same pointer type without losing any information).  However,
> it is usually a very common mistake (forgetting to pass a reference to
> the object and passing the object itself).  This is why you get warned.
> 
> Try calling ctime() with the address of tv.tv_sec:
> 
>         printf("%s\n", ctime(&tv.tv_sec));

#include <stdio.h>
#include <sys/time.h>

int main(void)
{
struct timeval tv;
struct timeval tv_current;
if (gettimeofday(&tv_current, NULL) == -1)
   err(1, "Could not get local time of day");
tv.tv_sec = tv_current.tv_sec-86400;
printf("%s\n", ctime(&tv.tv_sec));
return 0;
}

Does the job, thanks!
At compile time i get:

tijd.c: In function `main':
tijd.c:11: warning: passing arg 1 of `ctime' from incompatible pointer 
type

But it works:
Mon Aug  9 18:44:04 2004
nicely the time of yesterday.
Only thing left is another format like: 2004 Aug  9 18:44:04
Any hints?
Bye,

Mipam.



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?Pine.BSO.4.56.0408101842210.21307>