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

sprintf , do not printing time(0) and other values

本文关键字:其他 打印 时间 sprintf      更新时间:2023-10-16

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

我认为格式有问题,

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

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

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

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

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

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

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

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

相关文章: