2011-07-24 17 views
3

可能重复:
What primitive data type is time_t?正确记录UNIX时间C(-Wall噩梦)

基本上,所有我想要做的是产生当前的UNIX时间(从时间导致(NULL))并将其打印到已打开的文件中。

我已经试过这样的代码:

fprintf(f, "%i", time(NULL)); 

,但我得到这些恼人的编译器警告:

src/database-createtbl.c:140: warning: int format, time_t arg (arg 3) 

我试图用-Wall编译 - 这实在不应该一个问题,但它使我疯狂。

回答

5

简单地转换为已知类型:

printf("%ld", (long)time(NULL)); 

通过time返回的类型取决于操作系统(它的别名为time_t,但你不知道这是longint或别的东西),因此在将其传递到printf之前,需要将其转换为已知类型,以使格式与参数类型相匹配。

+1

这是最便携的(到C99之前的版本),但是使用long long或intmax_t(或其未签名的版本)和相应的C99格式说明符可能更安全。在一个假想的Y2038 32位计算机上,其中'long'是32位,而'time_t'是64位。 –