【发布时间】:2012-07-29 16:47:48
【问题描述】:
#include <stdio.h>
#include <time.h>
int main()
{
printf("Size of time_t is %lu bytes.\n", sizeof(time_t));
time_t biggest = 0x7fffffffffffffff; // line 1
printf("time_t's wrap around will be a second after %s.\n", asctime(gmtime(&biggest)) );
return 0;
}
在 time.h 中,这是 time_t 的定义吗?
typedef __darwin_time_t time_t
如何解释它?由于我没有任何想法,所以我使用 sizeof 函数找到了 time_t = 8 个字节。
为什么第 1 行给出错误呢? 我收到此错误
Segmentation fault: 11
【问题讨论】:
-
奇怪的是,标准似乎并没有强制要求包含
time_t最大值的常量。对于int和大多数其他类型,它在limit.h中进行了描述。time_t在sys/types.h中有描述,但我找不到包含最大值的宏(time.h中没有。 -
如果删除第一个 printf() 是否仍然存在段错误?
-
正如Greg所说,并不是所有的struct tm都可以保存time_t,当你使用gdb你可以看到gmtime(&biggest)返回的值总是NULL,这就解释了segFault。有关此 URL 的更多信息:lists.apple.com/archives/darwin-dev/2008/Apr/msg00098.html
-
仅供参考,
sizeof是运算符而不是函数。
标签: c