Книга: Linux программирование в примерах

6.1.3.1. Простое форматирование времени: asctime() и ctime()

6.1.3.1. Простое форматирование времени: asctime() и ctime()

Две первые стандартные процедуры, перечисленные ниже, выводят данные в фиксированном формате:

#include <time.h> /* ISO С */
char *asctime(const struct tm *tm);
char *ctime(const time_t *timep);

Как и в случае с gmtime() и localtime(), asctime() и ctime() возвращают указатели на статические буфера, которые могут быть перезаписаны после каждого вызова. Более того, эти две процедуры возвращают строки в одном и том же формате. Они отличаются лишь видом принимаемых аргументов, asctime() и ctime() должны использоваться тогда, когда все, что вам нужно, это простые сведения о дате и времени.

#include <stdio.h>
#include <time.h>
int main(void) {
 time_t now;
 time(&now);
 printf("%s", ctime(& now));
}

После запуска эта программа выводит результат в виде: 'Thu May 22 15:44:21 2003'. Завершающий символ конца строки включен в результат. Точнее, возвращаемое значение указывает на массив из 26 символов, как показано на рис. 6.1.


Рис. 6.1. Возвращаемая функциями ctime() и asctime() строка

Значительная часть старого кода Unix полагается на тот факт, что значения в возвращенной строке имеют фиксированную позицию. При использовании этих функций помните, что они включают завершающий символ конца строки. Поэтому наш небольшой пример программы использует для printf() простую форматирующую строку "%s", а не "%sn", как можно было бы ожидать.

ctime() устраняет необходимость шага вызова localtime(); в сущности, это эквивалентно

time_t now;
char *curtime;
time(&now);
curtime = asctime(localtime(&now));

Оглавление книги


Генерация: 1.849. Запросов К БД/Cache: 3 / 1
поделиться
Вверх Вниз