【问题标题】:sprintf , do not printing time(0) and other valuessprintf ,不打印 time(0) 和其他值
【发布时间】:2015-03-05 11:58:58
【问题描述】:

我正在尝试打印时间戳和 int 值:543

我认为格式有问题,

char buffer [50];
sprintf (buffer, "Time : %d , ID %d",time(0),543);

它打印正确的时间戳,但 ID 为 0

【问题讨论】:

    标签: c++ time timestamp printf


    【解决方案1】:

    您正在使用 %d 打印 time_t,它假定 time_tint。这可能不是真的,它可能是另一种更大的类型——它甚至可以是浮点类型,这会造成麻烦,因为你已经向 printf 承诺你要传入一个 int。

    没有用于打印 time_t 的 printf 格式说明符,但您可以将其转换为 long long,这在使用 64 位或更小的 time_t 整数类型的平台上是可以的(这是大多数平台):

     sprintf (buffer, "Time : %lld , ID %d",(long long)time(0),543);
    

    【讨论】:

      【解决方案2】:

      更可取的方法是使用ctimetime_t 转换为字符串并打印出来。

      或者,您可以使用gmtimelocaltime 将所需信息从time_t 提取到struct tm 并从中打印成员,或者在struct tm 上进一步使用strftime 并将时间打印为字符串。

      C 标准规定time_t 是实数,因此它可以是整数或浮点值(C11: 6.2.5.17) 所以,如果你必须打印time_t 值,那么你可以使用%lld(long long) 或%Lf(long double) 用于打印。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-01-02
        • 1970-01-01
        • 1970-01-01
        • 2022-01-14
        • 1970-01-01
        • 2020-02-07
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多