【发布时间】:2015-03-05 11:58:58
【问题描述】:
我正在尝试打印时间戳和 int 值:543
我认为格式有问题,
char buffer [50];
sprintf (buffer, "Time : %d , ID %d",time(0),543);
它打印正确的时间戳,但 ID 为 0
【问题讨论】:
我正在尝试打印时间戳和 int 值:543
我认为格式有问题,
char buffer [50];
sprintf (buffer, "Time : %d , ID %d",time(0),543);
它打印正确的时间戳,但 ID 为 0
【问题讨论】:
您正在使用 %d 打印 time_t,它假定 time_t 是 int。这可能不是真的,它可能是另一种更大的类型——它甚至可以是浮点类型,这会造成麻烦,因为你已经向 printf 承诺你要传入一个 int。
没有用于打印 time_t 的 printf 格式说明符,但您可以将其转换为 long long,这在使用 64 位或更小的 time_t 整数类型的平台上是可以的(这是大多数平台):
sprintf (buffer, "Time : %lld , ID %d",(long long)time(0),543);
【讨论】:
更可取的方法是使用ctime 将time_t 转换为字符串并打印出来。
或者,您可以使用gmtime 或localtime 将所需信息从time_t 提取到struct tm 并从中打印成员,或者在struct tm 上进一步使用strftime 并将时间打印为字符串。
C 标准规定time_t 是实数,因此它可以是整数或浮点值(C11: 6.2.5.17) 所以,如果你必须打印time_t 值,那么你可以使用%lld(long long) 或%Lf(long double) 用于打印。
【讨论】: