Файл: Pobegaylo_A._C_Cplus_dlya_studenta.pdf

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 13.12.2020

Просмотров: 4312

Скачиваний: 28

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
background image

Глава 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); 


background image

Часть 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

 этой функции должен указывать на 

строку  с  именем  строки,  которую  необходимо  найти.  Имена 
строк  зависят  от  среды  исполнения.  В  случае  успешного  завер-
шения функция возвращает адрес строки с информацией о среде 


background image

Глава 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> 


background image

Часть 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

, то результат работы функции непредсказуем.  


background image

Глава 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


Смотрите также файлы