3

我使用 sizeof() 运算符在 C 中打印 sizeof(struct tm) 它给了我 44 个字节。但是在 ctime 的手册页中它有 9 个 int 变量用于时间。那么它的大小应该是 36。它是如何给出 44 的?

4

3 回答 3

5

http://linux.die.net/man/3/ctime

glibc 版本的 struct tm 有额外的字段

long tm_gmtoff;           /* Seconds east of UTC */
const char *tm_zone;      /* Timezone abbreviation */

这就是你额外字节的来源(可能)。

于 2012-12-20T09:49:04.917 回答
2

除了 RedX 和 Adeel 的非常真实的答案之外,结构内部的填充也可能导致大小大于所有元素大小的总和。要使用自定义结构防止这种情况,您可以使用 GCC__attribute__((__packed__))功能。

于 2012-12-20T09:47:30.783 回答
2

struct tm 的 glibc 版本具有附加字段...

long tm_gmtoff;           /* Seconds east of UTC */
const char *tm_zone;      /* Timezone abbreviation */

再读一遍man ctime..

于 2012-12-20T09:49:53.033 回答