Вход/Регистрация
Программирование. Принципы и практика использования C++ Исправленное издание
вернуться

Страуструп Бьерн

Шрифт:

Библиотека

stdio
содержит также простые и полезные функции чтения и записи символов.

Обратите внимание на то, что результатом этих функций является число типа

int
(а не переменная типа
char
или макрос
EOF
). Рассмотрим типичный цикл ввода в программе на языке С.

int ch; /* но не char ch; */

while ((ch=getchar)!=EOF) { /* какие-то действия */ }

Не применяйте к потоку два последовательных вызова

ungetc
. Результат такого действия может оказаться непредсказуемым, а значит, программа не будет переносимой.

Мы описали не все функции из библиотеки

stdio
, более полную информацию можно найти в хороших учебниках по языку С, например в книге K&R.

Б.10.3. Строки в стиле языка С

Строки в стиле языка C представляют собой массивы элементов типа

char
, завершающиеся нулем. Эти строки обрабатываются функциями, описанными в заголовках
<cstring>
(или
<string.h>
; примечание: но не
<string>
) и
<cstdlib>
.

Эти функции оперируют строками в стиле языка С с помощью указателей

char*
(указатели
const char*
ссылаются на ячейки памяти, предназначенные исключительно для чтения).

Обратите внимание на то, что в языке C++ функции

strchr
и
strstr
дублируются, чтобы обеспечить безопасность типов (они не могут преобразовать тип
const char*
в тип
char*
, как их аналоги в языке C); см. также раздел 27.5.

Функции извлечения символов просматривают строку в стиле языка С в поисках соответственно форматированного представления числа, например "

124
" и "
1.4
". Если такое представление не найдено, функция извлечения возвращает
0
. Рассмотрим пример.

int x = atoi("fortytwo"); /* x становится равным 0 */

Б.10.4. Память

Функции управления памятью действуют в “голой памяти” (без известного типа) с помощью указателей типа

void*
(указатели
const void*
ссылаются на ячейки памяти, предназначенные только для чтения).

Функции

malloc
и ей подобные не вызывают конструкторы, а функция
free
не вызывает деструкторы. Не применяйте эти функции к типам, имеющим конструкторы или деструкторы. Кроме того, функция
memset
также никогда не должна применяться к типам, имеющим конструктор.

Функции, начинающиеся с приставки mem, описаны в заголовке

<cstring>
, а функции выделения памяти — в заголовке
<cstdlib>
.

См. также раздел 27.5.2.

Б.10.5. Дата и время

В заголовке

<ctime>
можно найти несколько типов и функций, связанных с датами и временем.

Структура

tm
определяется примерно так:

struct tm {

int tm_sec; // секунда минуты [0:61]; 60 и 61

//"високосные" секунды

int tm_min; // минута часа [0,59]

int tm_hour; // час дня [0,23]

int tm_mday; // день месяца [1,31]

int tm_mon; // месяц года [0,11]; 0 — январь (примечание: не [1:12])

int tm_year; // год с 1900- го года ; 0 — 1900-й год,

// 102 — 2002-й год

int tm_wday; // дни, начиная с воскресенья [0,6]; 0 — воскресенье

int tm_yday; // дней после 1 января [0,365]; 0 — 1 января

int tm_isdst; // часы летнего времени

};

Функции для работы с датами и временем

clock_t clock; // количество тактов таймера после старта программы

time_t time(time_t* pt); // текущее календарное

// время

double difftime(time_t t2, time_t t1); // t2–t1 в секундах

tm* localtime(const time_t* pt); // локальное время для *pt

  • Читать дальше
  • 1
  • ...
  • 499
  • 500
  • 501
  • 502
  • 503
  • 504
  • 505
  • 506
  • 507
  • 508
  • 509
  • ...

Ебукер (ebooker) – онлайн-библиотека на русском языке. Книги доступны онлайн, без утомительной регистрации. Огромный выбор и удобный дизайн, позволяющий читать без проблем. Добавляйте сайт в закладки! Все произведения загружаются пользователями: если считаете, что ваши авторские права нарушены – используйте форму обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

Подпишитесь на рассылку: