Время вызова в C ++ меняет мою структуру тм

0

Я пытаюсь сравнить текущее время с измененным временем даты файла и испытываю странную проблему. У меня есть структура tm *, которая содержит время, когда файл был изменен, но он изменяется на текущую дату после вызова времени (NULL).

Мой код:

  printf("month: %d\n", tmst->tm_mon);
  time_t curTime = time(NULL);
  printf("month: %d\n", tmst->tm_mon);
  struct tm * curSt = localtime ( &curTime );
  printf("month: %d\n", tmst->tm_mon);

.. где st - struct stat для файла. Выход:

month: 11
month: 5

Почему это? Что я должен делать по-другому?

  • 0
    Это не struct tm . Это struct tm* .
Теги:
time

2 ответа

3
Лучший ответ

Из документации:

Возвращаемое значение указывает на внутренний объект, срок действия которого или его значение могут быть изменены любым последующим вызовом gmtime или localtime.

Прочитайте документацию.

Документация рассказывает вам, как работают функции.

(То, что localtime возвращает указатель, является большой подсказкой: кто, по вашему мнению, освобождает pointee?: D)

2

Как указано в localtime(3) странице руководства:

Возвращаемое значение указывает на статически выделенную структуру, которая может быть перезаписана последующими вызовами любой из функций даты и времени.

Вам нужно скопировать значение, если вы не хотите, чтобы он был изменен из-под вас, например:

// Dereference and copy the result:
struct tm tmst = *localtime ( &st.st_mtime );

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню