Почему gettimeofday () и time_t не имеют смысла? - PullRequest
0 голосов
/ 02 февраля 2012

Почему, если я делаю следующее:

struct timeval time;

gettimeofday(&time, NULL);

log("time seconds %i useconds %i", sizeof(time.tv_seconds), sizeof(time.tv_usec));

Возвращается ли оно в openwrt:

time seconds 4 useconds 4259840

Использует ли time.tv_usec 4259840 байт?tv_seconds (начиная с эпохи) имеет смысл, так как это long long int.Но tv_usec всегда должно быть ниже 1 млн.

Ответы [ 2 ]

3 голосов
/ 02 февраля 2012

Оператор 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(), что также может быть источником вашей ошибки.

1 голос
/ 02 февраля 2012

Вглядываясь в мой хрустальный шар ... проблема в том, что ваша функция журнала неправильно анализирует свои аргументы.Попробуйте вместо этого printf.

...