localtime question
Mipam
mipam at ibb.net
Tue Aug 10 09:45:27 PDT 2004
> 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.
More information about the freebsd-questions
mailing list