Где и как ctime выделяет память?

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

char *ctime (const time_t *timer);

и вы можете видеть, что он возвращает указатель на результирующий массив char без какого-либо указателя char, переданного в аргументах. Таким образом, мне интересно, где ctime выделяет символьный буфер и кто его уничтожит, и не выделяет память внутри функции (кроме различных malloc, конечно), что считается беспорядком.

Какие-либо предложения?


person tonytony    schedule 13.05.2012    source источник


Ответы (1)


Из ссылки, которую вы цитируете:

Массив, содержащий эту строку, статически выделен и совместно используется функциями ctime и asctime. Каждый раз, когда вызывается одна из этих функций, содержимое этого массива перезаписывается.

Этот массив существует до тех пор, пока существует программа, его никто не должен освобождать.

В POSIX 2008 есть функция ctime_r, которая является реентерабельной (вы передаете ваш буфер), но он не является стандартным в C или C++.

person Mat    schedule 13.05.2012
comment
И если вам не нравится такое поведение, возможно, на вашей платформе есть ctime_r. - person David Schwartz; 13.05.2012
comment
Какой позор... Я не думал, что смогу быть настолько внимательным. Извините за глупый вопрос и спасибо =) - person tonytony; 13.05.2012
comment
@DavidSchwartz: Дох! Меня всегда раздражала эта штука со статическим размещением, но я никогда не думал о том, чтобы проверить, существуют ли реентерабельные версии. - person Matthieu M.; 13.05.2012