sprintf,不要打印时间(0)和其他值

时间:2015-03-05 11:58:58

标签: c++ time timestamp printf

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

我认为格式问题,

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

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

2 个答案:

答案 0 :(得分:1)

您正在使用%d打印time_t,假设time_tint。这可能不是真的,它可能是另一个更大的类型 - 它甚至被允许成为一个浮点类型,这会导致麻烦,因为你已经承诺printf你传入了一个int。 / p>

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

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

答案 1 :(得分:0)

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

或者,您可以使用time_tstruct tm将所需信息从gmtime提取到localtime并打印成员或strftime struct tm time_t 1}}并将时间打印为字符串。

C标准指定time_t是实数,因此它可以是整数或浮点值(C11:6.2.5.17)因此,如果必须打印%lld值,则可以使用{ {1}}(很长)或%Lf(长双)打印它。