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

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

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

我认为格式有问题,

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

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

您正在使用 %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);

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

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

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