Спецификация функций ctime
и asctime
восходит к C89, и в те дни все было немного иначе, в основном из-за того, что многопроцессорные системы были не очень распространены и, таким образом, использование статического буфера было бы бесполезным. не вызывает больших проблем.
Скорее всего, они не возвращали динамически выделенную память, потому что это занимало дополнительное время, и в те дни циклы ЦП были сложнее проходить.
Если вы работаете в системе POSIX, такой как Linux, у вас есть две другие доступные функции, которые в основном и являются альтернативой:
char *asctime_r(const struct tm *tm, char *buf);
char *ctime_r(const time_t *timep, char *buf);
Эти функции принимают указатель на буфер, который может принимать выходные данные (и они возвращают указатель на тот же буфер). Суффикс _r
означает «входящий», что означает, что его можно безопасно вызывать либо в многопоточной программе, либо несколько раз без точки последовательности между ними.