Описание функций Си

         

Malloc



     malloc

Функция Выделяет память.

Синтаксис #include

#include

void *malloc(size_t size);

Файл, содержащий stdlib.h и alloc.h прототип

Описание Функция обеспечивают выделение блока памяти, раз- мером size байт.Она позволяет программе выделять память по необходимости и столько, сколько нужно.

Динамическая область памяти доступна для динами- ческого размещения блоков памяти переменной дли- ны. Многие структуры данных, такие как "деревья" или "списки" - естественным образом используют динамическое распределение памяти.

В малых моделях памяти, вся область памяти между концом сегмента данных и вершиной программного стека доступна для использования, за исключением 256-байтовой границы, находящейся непосредственно перед вершиной стека. Данная граница предназначе- на для наращивания стека прикладной программы (плюс небольшое количество, требуемое для DOS).

В больших моделях памяти все пространство после программного стека до конца физической памяти доступно для динамической области.

Возвращаемое значение Функция malloc возвращает указатель на блок выде- ленной памяти. Если для размещения блока недоста- точно памяти, функция malloc возвращает NULL. Со- держимое блока остается неизменным. Если аргумент size равен 0, то функция возвращает NULL.

Переносимость Функция доступна в системах UNIX и поддерживается стандартом ANSI C.

Смотрите также

Пример:

#include

#include

#include

#include

int main(void) { char *str; /* выделить память под строку */

if((str = malloc(10)) == NULL) { printf("Недостаточно памяти\n"); exit(1); /* завершение с кодом ошибки */ } /* скопировать в строку "Hello" */ strcpy(str,"Hello"); /* вывести строку */ printf("Строка: %s\n",str); /* освободить память */ free(str); return 0; }





Matherr



     matherr

Функция Процедура обработки ошибок операций с плавающей точкой, модифицируемая пользователем

Синтаксис #include

int matherr(struct exception *e);

Файл, содержащий math.h прототип

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

matherr служит в качестве пользовательской ловуш- ки, (функции определяемой пользователем) которую вы можете написать сами (смотрите пример).

matherr сожно использовать для отслеживания оши- бок области определения и выхода за пределы диа- пазона, происходящих в математических функциях. Она не отслеживает исключительных ситуаций, воз- никающих при работе со значениями с плавающей точкой (например при делении на 0). Для отслежи- вания таких ошибок смотри функцию signal.

Вы можете модифицировать процедуру matherr специ- ально для вашего случая (то есть она будет отлав- ливать определенные типы ошибок); модифицирован- ная функция matherr должна возвращать 0, если она не может обработать данную ошибку, и 1, если ошибка успешно обработана. Если функция matherr возвращает ненулевое значение, сообщение об ошиб- ке не печатается, и переменная errno не изменяет- ся.

Ниже приведена структура exception (определенная в файле math.h):

struct exception { int type; char *Function; double arg1, arg2, retval; };

Составные части структуры exception обозначают следующее:

---------T-------------------------------------------------¬ ¦Имя ¦ Что это ¦ +--------+-------------------------------------------------+ ¦type ¦ тип произошедшей математической ошибки; тип enum¦ ¦ ¦ определен в typedef_mexcep (смотрите определение¦ ¦ ¦ после данного списка). ¦ ¦Function¦ указатель на символьную строку с нулевым ¦ ¦ ¦ окончанием, содержащую имя библиотечной ¦ ¦ ¦ математической функции, которая выдала ошибку. ¦ ¦arg1, ¦ аргументы (переданные данной функции), которые ¦ ¦arg2 ¦ вызвали ошибку; если функции передается только ¦ ¦ ¦ один аргумент, он хранится в arg1. ¦ ¦retval ¦ стандартное возвращаемое значение для функции ¦ ¦ ¦ matherr; вы можете модифицировать это значение. ¦ L--------+--------------------------------------------------


Параметр typedef_mexcep, также определенный в файле math.h, перечисляет следующие символические константы, представляющие собой возможные матема- тические ошибки:

----------------T------------------------------------------¬ ¦Символическая ¦ Математическая ошибка ¦ ¦константа ¦ ¦ +---------------+------------------------------------------+ ¦DOMAIN ¦ аргумент не находится в области ¦ ¦ ¦ определения функции (например log(-1)); ¦ ¦SING ¦ аргументы дают ошибку в сингулярности ¦ ¦ ¦ (например pow(0,-2)); ¦ ¦OVERFLOW ¦ аргумент приводит к результату, превыша- ¦ ¦ ¦ ющему MAXDOUBLE (например exp(1000)); ¦ ¦UNDERFLOW ¦ аргумент приводит к результату, меньшему ¦ ¦ ¦ MINDOUBLE (например exp(-1000)); ¦ ¦TLOSS ¦ аргументы дают результат с потерей значащ¦ ¦ ¦ цифр например sin(10e70)). ¦ L---------------+-------------------------------------------

Символические константы MAXDOUBLE и MINDOUBLE оп- ределены в файле values.h.

Исходный код для функции matherr, определенной по умолчанию находится на дистрибутивных дисках с системой Turbo C++.

Стандарт UNIX функции matherr несовместим со стандартом ANSI C. Если вам требуется версия фун- кции matherr для системы UNIX, пользуйтесь прог- раммой matherr.c, поставляемой на дистрибутивных дискетах пакета Turbo C.

Возвращаемое значение По умолчанию функция matherr возвращает 1 если ошибка UNDERFLOW или TLOSS, иначе 0. Функция matherr также может модифицировать параметр e->retval, который посредством функции matherr передается в вызывающую программу.

Когда функция matherr возвращает 0, (означающий, что обработать ошибку она не может), функция _matherr устанавливает переменную errno и печатает сообщение об ошибке. Когда функция matherr возвра- щает ненулевое значение, (означающее, что ошибка успешно обработана), глобальная переменная errno не устанавливается и сообщение об ошибке не выво- дится.

Переносимость matherr доступна на многих компиляторах Си, одна- ко она не поддерживается стандартом ANSI C. matherr в стиле системы UNIX (которая печатает сообшение и завершает выполнение программы) пос- тавляется вместе с пакетом Turbo C++ в файле MATHERR.C. matherr может не поддерживаться в дальнейших версиях Turbo C++. Пример:

#include

#include

#include

int matherr(struct exception *a); { if (a -> type == DOMAIN) { if(strcmp(a -> name, "sqrt") == 0) { a -> retval = sqrt (-(a -> arg1)); return (1); } } return (0); }

int main(void) { double x,y; x = -2.0; y = sqrt(x); printf("Значение, скорректированное matherr: %lf\n",y); return 0; }


Max



     max

Функция Возвращает наибольшее из двух значений.

Синтаксис #include

(type)max(a,b);

Файл содержащий stdlib.h прототип

Описание Эта макрокоманда производит сравнение двух значе- ний и возвращает наибольшее из двух. Объявление функции и оба аргумента должны быть одного типа.

Возвращаемое значений max возвращает наибольшее из двух значений.

Смотрите также

Пример:

#include

int main(void) { int x = 5; int y = 6; int z; z = max(x,y); printf("Наибольшее значение: %d\n",z); return 0; }

Вывод:

Наибольшее значение: 6



Memccpy



     memccpy

Функция Копирует блок размером в n байт.

Синтаксис #include

void *memccpy(const void *dest, const void *src, int c, size_t n); Файл содержащий mem.h

Описание memccpy копирует блок из n байт из src в dest. Ко- пирование прекращается при следующих обстоятель- ствах:

- первым копируется символ c;

- в dest скопировано n байт;

Возвращаемое значение memccpy возвращает указатель на байт, сразуже следующий за с, если он был скопирован. В противном случае memccpy возвращает NULL.

Переносимость memccpy доступна в UNIX System V.

Смотрите также

Пример:

#include

#include

int main(void) { char *src = "This is the source string"; char dest[50]; char *ptr; ptr = memccpy(dest,src,'c',strlen(src)); if(ptr) { *ptr = '\0'; printf("Был найден символ %s\n",dest); } else printf("Символ не найден\n"); return 0; }



Memchr



     memchr

Функция Просматривает n байт в поисках символа c.

Синтаксис #include

void *memchr(const void *s, int c, size_t n);

Файл содержащий mem.h, string.h

Описание memchr просматривает блок размером n байт, на ко- торый указывает параметр s, в поисках символа c.

Возвращаемое значение При успешном завершении memchr возвращает указатель на первый байт, содержащий с, в противном случае memchr возвращает NULL.

Переносимость memchr доступна в UNIX System V и поддерживается стандартом ANSI C.

Пример:

#include

#include

int main(void) { char *src = "This is a string"; char *ptr; ptr = memchr(src,'r',strlen(src)); if(ptr) { printf("Был найден символ 'r'на позиции %d\n",ptr-src); } else printf("Символ не найден\n"); return 0; }



Memcmp



     memcmp

Функция Сравнивает два блока каждый из которых длино в n байт.

Синтаксис #include

void *memcmp(const void *s1, const void *s2, size_t n);

Файл содержащий mem.h,string.h прототип

Описание memcmp сравнивает первые n байт блоков s1 и s2, как значения типа unsigned char.

Возвращаемое memcmp возвращает значение: значение 0 - если s1 больше s2

Т.к. memcmp производит сравнение значе- ний, имеющих тип unsigned char, то при таком вызове:

memcmp("\xFF", "\x7F",1);

возвращаемое значение будет > 0.

Переносимость memcmp доступна в UNIX System V и поддерживается стандартом ANSI C.

Смотрите также

Пример:

#include

#include

int main(void) { char *buf1 = "aaa"; char *buf2 = "bbb"; char *buf3 = "ccc"; int stat; stat = memcmp(buf2,buf1,strlen(buf2)); if(stat>0) printf("buf2 > buf1\n"); else printf("buf2 < buf1\n"); stat = memcmp(buf2,buf3,strlen(buf2)); if(stat buf3\n"); else printf("buf2 < buf3\n"); return 0; }



Memcpy



     memcpy

Функция Копирует блок длиной n байт.

Синтаксис #include

void *memcpy(void *dst,const void *src,size_t n);

Файл, содержащий string.h, mem.h прототип

Описание memcpy копирует n байт из src в dst. Если src и dst перекрываются, то поведение функции неопреде- лено.

Возвращаемое memcpy возвращает dst. значение

Переносимость memcpy доступна в UNIX System V и поддерживается стандартом ANSI C.

Смотрите также

Пример:

#include

#include

int main(void) { char src[] = "******************************"; char dest[] = "abcdefghijklmnopqrstuvwxyz0123456789"; char *ptr; printf("Строка назначения перед копированием: %s",dest); ptr = memcpy(dest,src,strlen(len)); if(ptr) printf("Строка назначения после копирования: %s",dest); else printf("ошибка memcpy"); return 0; }



Memicmp



     memicmp

Функция Сравнивает n байт двух массивов символов, игнори- руя различие регистров.

Синтаксис #include

int memcmp(const void *s1, const void *s2, size_t n);

Файл содержащий mem.h,string.h прототип

Описание memicmp сравнивает первые n байт блоков s1 и s2, игнорируя различия регистров (верхний или ниж- ний).

Возвращаемое memicmp возвращает значение: значение 0 - если s1 больше s2

Переносимость memicmp доступна в UNIX System V.

Смотрите также

Пример:

#include

#include

int main(void) { char *buf1 = "ABCDE123"; char *buf2 = "abcde456"; int stat; stat = memicmp(buf1,buf2,5); printf("Строки до позиции 5"); if(stat) printf("не"); printf("равны"); return 0; }



Memmove



     memmove

Функция Копирует блок размером в n байт.

Синтаксис #include

void *memmove(void *dest, const void *src, size_t n);

Файл содержащий mem.h,string.h прототип

Описание memmove копирует блок из n байт из src в dest. Ко- пирование будет произведено корректно, даже, если блоки перекрываются.

Возвращаемое memmove возвращает dest. значение

Переносимость memmove доступна в UNIX System V и поддерживается стандартом ANSI C.

Смотрите также

Пример:

#include

#include

int main(void) { char src[] = "******************************"; char dest[] = "abcdefghijklmnopqrstuvwxyz0123456789"; printf("Строка назначения перед копированием: %s",dest); ptr = memmove(dest,src,26); printf("Строка назначения после копирования: %s",dest); return 0; }



Memset



     memset

Функция Заполняет блок размером в n байт значениеями c.

Синтаксис #include

void *memset(void *s, int c, size_t n);

Файл содержащий mem.h, string.h прототип

Описание memset присваивает первым n байтам массива s зна- чение c.

Возвращаемое memmove возвращает s. значение

Переносимость memset доступна в UNIX System V и поддерживается стандартом ANSI C.

Смотрите также

Пример:

#include

#include

#include

int main(void) { char buffer[] = "Hello world\n"; printf("Буфер перед использованием функции memset:%s\n",buffer); memset(buffer,'*',strlen(buffer) - 1); printf("Буфер после использованя функции memset:%s\n",buffer); return 0; }



Min



     min

Функция Возвращает меньшее из двух значений.

Синтаксис #include

(type)min(a,b);

Файл содержащий stdlib.h прототип

Описание min производит сравнение двух значений и воз- вращает меньшее из двух. Объявление функции и оба аргумента должны быть одного типа.

Возвращаемое min возвращает меньшее из двух значений. значений

Смотрите также

Пример:

#include

#include

int main(void) { int x = 5; int y = 6; printf("Наименьшее значение: %d\n",min(x,y)); return 0; }

Вывод:

Наименьшее значение: 6



MK_FP



     MK_FP

Функция Создает "дальний" адресный указатель.

Синтаксис #include

void far *MK_FP(unsigned seg, unsigned ofs);

Файл, содержащий dos.h прототип

Описание MK_FP это макроопределение, которое создает даль- ний указатель из адреса сегмента (seg) и смещения (ofs).

Возвращаемое MK_FR возвращает "дальний" указатель.

Переносимость MK_FP уникальна для Turbo C++.

Смотрите также

Пример:

#include

#include

int main(void) { int gd,gm,i; unsigned int far *screen; getectgraph(&gd,&gm); if(gd == HERMONO) screen = MK_FP(0xB000,0); else screen = MK_FP(0xB800,0); for(i=0; i



Mkdir



     mkdir

Функция Создает директорию.

Синтаксис #include

int mkdir(const char *path);

Файл содержащий dir.h прототип

Описание mkdir создает новую директорию по имени данного маршрута.

Возвращаемое При успешном завершении mkdir возвращает 0. При значение возникновении ошибки mkdir возвращает -1 и прис- ваивает глобальной переменной errno одно из сле- дующих значений:

EACCES - Доступ запрещен; ENOENT - Нет такого файла или директории.

Смотрите также

Пример:

#include

#include

#include

#include

int main(void) { int status; clrscr(); status = mkdir("asdfjklm"); (!status) ? (printf("Директория создана\n")) : (printf("Не могу создать директорию\n")); getch(); system("dir"); getch(); status = rmdir("asdfjklm"); (!status) ? (printf("Директория удалена\n")) : (printf("Не могу удалить директорию\n")); return 0; }



Mktemp



     mktemp

Функция Создает уникальное имя файла.

Синтаксис #include

char *mktemp(char *template);

Файл, содержащий dir.h прототип

Описание Функция mktemp помещает в параметр template уни- кальное имя файла и возвращает адрес template.

Параметр template должен представлять собой стро- ку символов с нулевым окончанием и шестью хвосто- выми символами x. Данные 6 знаков X заменяются на уникальное сочетание букв плюс точка таким обра- зом, что две буквы, точка и три буквы суффикса дают в результате новое имя файла.

Новое имя файла присваивается после просмотра имеющихся имен на диске, начиная с имени AA.AAA, и избегая уже существующих имен в том же формате.

Возвращаемое Если параметр template корректно сформирован, значение функция mktemp возвращает адрес символьной строки template. В противном случае она возвращает ноль.

Переносимость Функция поддерживается на системах UNIX.

Пример:

#include

#include

int main(void) { /* fname определяет маску для имени файла */ char *fname = "TXXXXXX", *ptr; ptr = mktemp(fname); printf("%s\n",ptr); return 0; }



Mktime



     mktime

Функция Преобразует время к календарному времени.

Синтаксис #include

time_t mktime(struct tm *t);

Файл, содержащий time.h прототип

Описание Преобразует время из структуры, на которую указы- вает параметр t, в календарное время в формат, используемый функцией time. Исходные значение по- лей tm_sec, tm_min, tm_hour, tm_mday и tm_mon не ограничены диапазонами, приведенными при описании структуры tm. Если значение поля выходит за ука- занные пределы, то оно приводится к нужному диа- пазону. Значения для полей tm_wday и tm_yday вы- числяются после приведения остальных значений.

Возвращаемое Смотри комментарии. значение

Переносимость mktime поддерживается стандартом ANSI C.

Смотрите также

Пример:

#include

#include

char *wday[] = {"Воскресенье","Понедельник","Вторник", "Среда","Четверг","Пятница","Суббота", "Неизвестен"};

int main(void) { struct tm time_check; int year,month,day; /* для нахождения дня недели, необходимо ввести день, месяц и год */ printf("Год: "); scanf("%d",&year); printf("Месяц: "); scanf("%d",&month); printf("День: "); scanf("%d",&day); /* занести данные в структуру time_check */ time_check.tm_year = year -1900; time_check.tm_mon = month - 1; time_check.tm_mday = day; time_check.tm_hour = 0; time_check.tm_min = 0; time_check.tm_sec = 0; time_check.tm_isdst = -1; /* для заполнения оставшихся полей вызвать mktime */ if(mktime(&time_check) == -1) time_check.tm_wday = 7; /* вывести день недели */ printf("Это был: %s\n",wday[time_check.tm_wday]); return 0; }



Modf



     modf

Функция Расщепляет число (double) на целую и дробную части.

Синтаксис #include

double modf(double x, double *iptr)

Файл, содержащий math.h прототип

Описание modf разделяет число типа double на целую и дроб- ную части. Целая часть помещается в ipart, а дробная часть возвращается.

Возвращаемое modf возвращает дробную часть x. значение

Смотрите также

Пример:

#include

#include

int main(void) { double fraction,integer; double number = 100000.567; fraction = modf(number,&integer); printf("Целая и дробная части числа %lf равны %lf и %lf", number, integer, fraction); return 0; }



Movedata



     movedata

Функция Копирует n байт.

Синтаксис #include

void movedata(unsigned segsrc, unsigned offsrc, unsigned segdst, unsigned offdst, size_t n);

Файл, содержащий mem.h, string.h прототип

Описание Функция movedata копирует n байт, с исходного ад- реса (segsrc:offsrc) по адресу (segdest:offdest).

Функция выполняет перемещение блоков данных, не- зависимо от модели памяти.

Возвращаемое Нет. значение

Переносимость movedata уникальна для DOS.

Смотрите также

Пример:

#include

#define COLOR_BASE 0xB800 #define BUFFER_SIZE 80*25*2

char buf[BUFFER_SIZE];

/* сохранить содержимое буфера цветного дисплея в памяти */ void save_color_screen(char near *buffer) { movedata(COLOR_BASE, 0, _DS, (unsigned)buffer, BUFFER_SIZE); } int main(void) { save_color_screen(buf); return 0; }



Moverel



     moverel

Функция Перемещает текущую позицию (CP) на заданное рас- стояние.

Синтаксис #include

void far moverel(int dx,int dy);

Файл, содержащий graphics.h прототип

Описание moverel перемещает текущую позицию (CP) на dx точек по оси Х и на dy точек по оси Y.

Возвращаемое Нет. значение

Переносимость Функция уникальна для Turbo C++. Она работает только на компьютерах IBM PC и совместимых с ни- ми, оснащенных дисплейными адаптерами, поддержи- вающими графический режим.

Смотрите также

Пример:

#include

#include

#include

#include

int main(void) { /* Запрос автоопределения */ int graphdriver = DETECT, gmode, errorcode; char msg[80];

/* инициализация графики и локальных переменных */ initgraph(&graphdriver,&gmode,"");

/* получение результата инициализации */ errorcode = graphresult(); if(errorcode != grOk) /* если ошибка */ { printf("Ошибка :%s\n",grapherrormsg(errorcode)); printf("Для останова нажмите любую клавишу\n"); getch(); exit(1); /* завершение с кодом ошибки */ } /* переместить текущую позицию (CP) в точку (20,30) */ moveto(20,30); /* нарисовать точку */ putpixel(getx(),gety(),getmaxcolor()); /* создать строку с сообщением */ sprintf(msg," (%d,%d)",getx(),gety()); outtextxy(20,30,msg); /* переместить текущую позицию относительно текущего положения */ moverel(100,100); /* нарисовать точку */ putpixel(getx(),gety(),getmaxcolor()); /* создать строку с сообщением */ sprintf(msg," (%d,%d)",getx(),gety()); outtext(msg);

/* очистка */ getch(); closegraph(); return 0; }



Movetext



     movetext

Функция Копирует текст на экране из одного прямоугольника в другой.

Синтаксис #include

int movetext(int left, int top, int right, int bottom, int destleft, int desttop);

Файл содержащий conio.h прототип

Описание movetext копирует содержимое прямоугольника на эк- ране, определяемого аргументами left, top, right и bottom, в новый прямоугольник, имеющий теже размеры. Левый верхний угол этого прямоугольника определяется параметрами destleft, desttop.

Все координаты являются абсолютными, т.е. коорди- натами относительно левого верхнего угла экрана.

Текст будет скопирован корректно, даже если пря- моугольники перекрываются.

movetext работает в текстовом режиме и производит непосредственный вывод на экран.

Возвращаемое movetext возвращает ненулевое значение в случае значение успешного завершения. При ошибке (например, если указанные координаты лежат за пределами экрана), movetext возвращает 0.

Переносимость movetext может использоваться на системах IBM PC и совместимых с ней.

Смотрите также

Пример:

#include

#include

int main(void) { char *str = "Это тестовая строка"; clrscr(); cputs(str); getch(); movtext(1,1,strlen(str),2,10,10); getch(); return 0; }



Moveto



     moveto

Функция Перемещает текущую позицию (CP) в точку с коор- динатами (x,y).

Синтаксис #include

void far moveto(int x,int y);

Файл, содержащий graphics.h прототип

Описание moveto перемещает текущую позицию (CP) в позицию с координатами (x,y) в текущей области просмотра.

Возвращаемое Нет. значение

Переносимость Функция уникальна для Turbo C++. Она работает только на компьютерах IBM PC и совместимых с ни- ми, оснащенных дисплейными адаптерами, поддержи- вающими графический режим.

Смотрите также

Пример:

#include

#include

#include

#include

int main(void) { /* Запрос автоопределения */ int graphdriver = DETECT, gmode, errorcode; char msg[80];

/* инициализация графики и локальных переменных */ initgraph(&graphdriver,&gmode,"");

/* получение результата инициализации */ errorcode = graphresult(); if(errorcode != grOk) /* если ошибка */ { printf("Ошибка :%s\n",grapherrormsg(errorcode)); printf("Для останова нажмите любую клавишу\n"); getch(); exit(1); /* завершение с кодом ошибки */ } /* переместить текущую позицию (CP) в точку (20,30) */ moveto(20,30); /* нарисовать точку */ putpixel(getx(),gety(),getmaxcolor()); /* создать строку с сообщением */ sprintf(msg," (%d,%d)",getx(),gety()); outtextxy(20,30,msg); /* нарисовать линию относительно текущей позиции */ moveto(100,100); /* нарисовать точку */ putpixel(getx(),gety(),getmaxcolor()); /* создать строку с сообщением */ sprintf(msg," (%d,%d)",getx(),gety()); outtext(msg); /* очистка */ getch(); closegraph(); return 0; }



Movmem



     movmem

Функция Копирует блок, длиной length байт.

Синтаксис #include

void movmem(void *src, void *dest, unsigned length);

Файл, содержащий mem.h прототип

Описание Функция movmem копирует блок длиной length байт с исходного адреса src по адресу dest. Направление копирования всегда выбирается таким образом, что данные всегда копируются точно, даже если блоки перекрываются.

Возвращаемое Нет. значение

Переносимость movmem уникальна для Turbo C++.

Смотрите также

Пример:

#include

#include

#include

#include

int main(void) { char *source = "Borland International"; char *destination; int length; length = strlen(source); destination = malloc(length+1); movmem(source,destination,length); printf("%s\n",destination); return 0; }