ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 13.12.2020
Просмотров: 4312
Скачиваний: 28
Глава 21. Стандартные функции <stdlib.h>
291
Единственный параметр
status
этой функции является кодом за-
вершения программы. В заголовочном файле stdlib.h предопреде-
лены следующие два макроса:
EXIT_SUCCESS
и
EXIT_FAILURE
, кото-
рые могут использоваться как код завершения и соответственно
отмечают успешное или неудачное завершение программы. Эти
символические константы обычно определяются следующим об-
разом:
#define EXIT_SUCCESS 0
#define EXIT_FAILURE 1
Остальные коды завершения определяются разработчиком.
Используется функция
exit
в основном для выхода из програм-
мы, который выполняется из вложенной функции.
Работает функция
exit
следующим образом. Сначала вызываются
все функции, установленные функцией
atexit
. Затем освобожда-
ются все буферы ввода/вывода, закрываются все потоки вво-
да/вывода и удаляются все временные файлы, созданные функци-
ей
tmpfile
. После этого управление передается системе.
В листинге 21.7 приведен пример использования функции
exit
.
Листинг 21.7. Выход из программы с кодом завершения
#include <stdio.h>
#include <stdlib.h>
void fun(void)
{
printf("Exit from the program.\n");
exit(EXIT_SUCCESS);
}
int main()
{
fun();
printf("After fun.\n");
return 0;
}
Для аварийного завершения программы используется функция
abort
, которая имеет следующий прототип:
void abort(void);
Часть III. Стандартная библиотека языка программирования C
292
Функция
abort
используется для аварийного завершения про-
граммы в случае возникновения ошибки, которую невозможно
исправить.
Работает эта функция следующим образом. Сначала она генери-
рует сигнал
SIGABRT
. Если программой не установлен обработчик
этого сигнала, то система завершает программу с выдачей сооб-
щения об аварийном завершении. Если для обработки сигнала
SIGABRT
установлен обработчик, то управление передается ему.
Если этот обработчик возвращает управление функции
abort
, то
эта функция завершает исполнение программы вызовом функции
exit
с кодом завершения
EXIT_FAILURE
.
В листинге 21.8 приведен пример использования функции
abort
.
Листинг 21.8. Аварийное завершение программы
#include <stdio.h>
#include <stdlib.h>
void fun(void)
{
printf("Abort the program.\n");
abort();
}
int main()
{
fun();
printf("After fun.\n");
return 0;
}
Для поиска строки, содержащей информацию о среде исполнения
программы, используется функция
getenv
, которая имеет сле-
дующий прототип:
char* getenv(const char *name);
Единственный параметр
name
этой функции должен указывать на
строку с именем строки, которую необходимо найти. Имена
строк зависят от среды исполнения. В случае успешного завер-
шения функция возвращает адрес строки с информацией о среде
Глава 21. Стандартные функции <stdlib.h>
293
исполнения. В противном случае функция возвращает значение
NULL
.
Пример получения информации о типе операционной системы
при помощи функции
getenv
приведен в листинге 21.9.
Листинг 21.9. Получение информации о среде исполнения
#include <stdio.h>
#include <stdlib.h>
int main()
{
char* os = "OS";
printf("%s\n", getenv(os));
return 0;
}
Для интерпретации строки командным процессором используется
функция
system
, которая имеет следующий прототип:
int system(const char *str);
Единственный параметр
str
этой функции должен указывать на
командную строку, которая передается для интерпретации ко-
мандному процессору. Поведение программы после передачи
управления командному процессору зависит от системы.
Если в параметре
str
функции установлено значение
NULL
, то
функция определяет, присутствует ли в среде исполнения
командный процессор. Если командный процессор присутствует,
то функция возвращает ненулевое значение, в противном слу-
чае — ноль.
В листинге 21.10 приведен пример запуска программы Notepad.exe
посредством вызова командного процессора.
Листинг 21.10. Передача строки для интерпретации
командным процессором
#include <stdio.h>
#include <stdlib.h>
Часть III. Стандартная библиотека языка программирования C
294
int main()
{
if(!system(NULL))
{
printf("There is no command processor.\n");
return 0;
}
/* запускаем программу Notepad.exe */
printf("ret code = %d\n", system("Notepad.exe"));
return 0;
}
21.5. Преобразования строк в числа
Для преобразования строк в числовые значения предназначены
функции
atoi
,
atol
,
atof
,
strtol
,
strtoul
и
strtod
.
Для преобразования строки в целое число используется функция
atoi
, которая имеет следующий прототип:
int atoi(const char *str);
В случае успешного завершения эта функция возвращает целое
число, в которое преобразована строка
str
, а в случае неудачи —
0
. Если число, записанное в строке
str
, выходит за диапазон типа
int
, то результат работы функции непредсказуем. Например:
int n;
char *str = "-123";
n = atoi(str); /* n = -123 */
Для преобразования строки в длинное целое число используется
функция
atol
, которая имеет следующий прототип:
long int atol(const char *str);
В случае успешного завершения эта функция возвращает целое
число, в которое преобразована строка
str
, а в случае неудачи —
0
. Если число, записанное в строке
str
, выходит за диапазон типа
long
, то результат работы функции непредсказуем.
Глава 21. Стандартные функции <stdlib.h>
295
Например:
long int n;
char *str = "-123";
n = atol(str); /* n = -123 */
Для преобразования строки в число типа
double
используется
функция
atof
, которая имеет следующий прототип:
double atof(const char *str);
В случае успешного завершения эта функция возвращает число
типа
double
, в которое преобразована строка
str
, а в случае не-
удачи —
0
. Если число, записанное в строке
str
, выходит за диа-
пазон типа
double
, то результат работы функции непредсказуем.
Например:
double n;
char *str = "-123.321";
n = atof(str); /* n = -123.321 */
Функции
strtol
,
strtoul
и
strtod
выполняют действия, анало-
гичные функциям
atoi
,
atol
,
atof
, но предоставляют более широ-
кие возможности.
Для преобразования строки в длинное целое число со знаком ис-
пользуется функция
strtol
, которая имеет следующий прототип:
long int strtol(const char *str, char **endptr, int base);
Параметр
str
указывает на строку, которая преобразуется в число
типа
long int
. Остальные параметры этой функции имеют сле-
дующее назначение.
Значение параметра
endptr
устанавливается функцией
strtol
.
Это значение содержит указатель на символ, который остановил
преобразование строки
str
. В случае успешного завершения
функция
strtol
возвращает число типа
long int
, в которое пре-
образуется строка, а в случае неудачи —
0
.
Параметр
base
указывает на систему счисления, которая исполь-
зовалась для записи числа в строке. Если параметр
base
равен
0
,
то преобразование зависит от первых двух символов строки
str
: