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; }