【问题标题】:Correctly recording the UNIX time in C (-Wall nightmare) [duplicate]正确记录 C 中的 UNIX 时间(-Wall 噩梦)[重复]
【发布时间】:2011-10-11 20:58:20
【问题描述】:

可能重复:
What primitive data type is time_t?

基本上,我要做的就是生成当前的 UNIX 时间(从 time(NULL) 得到的结果)并将其打印到我打开的文件中。

我试过这样的代码:

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

但我收到了这些烦人的编译器警告:

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

我正在尝试使用 -Wall 进行编译 - 这确实不应该是一个问题,但它让我发疯了。

【问题讨论】:

    标签: c


    【解决方案1】:

    简单地转换为已知类型:

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

    time 返回的类型取决于操作系统(别名为time_t,但您不知道这是long 还是int 或其他),因此您需要将其转换为传递给printf 之前的已知类型,以便格式与参数类型匹配。

    【讨论】:

    • 这是最便携的(到 C99 之前的版本),但使用 long longintmax_t(或其无符号版本)和相应的 C99 格式说明符可能更安全,例如在假设的 Y2038 后 32 位机器上,其中 long 是 32 位,但 time_t 是 64 位。
    猜你喜欢
    • 2019-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-21
    • 2020-03-14
    • 2010-11-13
    • 2010-12-22
    • 1970-01-01
    相关资源
    最近更新 更多