Оператор sizeof
возвращает объект size_t
.Вы должны использовать формат %zu
, чтобы распечатать его, а не %i
.Вполне возможно, что некоторые аргументы передают неудачу из-за несоответствующих форматных строк и типов аргументов.Если вы повысите уровень предупреждения на вашем компиляторе, вы должны получить предупреждение об этом.Например, clang говорит мне:
example.c:7:25: error: conversion specifies type 'int' but the argument has type
'unsigned long' [-Werror,-Wformat]
printf("time seconds %i useconds %i\n", sizeof(time.tv_sec), ...
~^ ~~~~~~~~~~~~~~~~~~~
%lu
Конечно, это может зависеть от того, как реализована ваша функция log()
, что также может быть источником вашей ошибки.