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_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
并从中打印成员或进一步使用 strftime
struct tm
并将时间打印为字符串。
C标准规定time_t
是实数,所以它可以是整数或浮点值(C11: 6.2.5.17) 所以,如果你必须打印time_t
值,那么你可以使用 %lld
(long long) 或 %Lf
(long double) 打印它。
我正在尝试打印时间戳和整数值: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
并从中打印成员或进一步使用 strftime
struct tm
并将时间打印为字符串。
C标准规定time_t
是实数,所以它可以是整数或浮点值(C11: 6.2.5.17) 所以,如果你必须打印time_t
值,那么你可以使用 %lld
(long long) 或 %Lf
(long double) 打印它。