}
Данная функция возвращает значение типа int, т.е. длина строки не может превышать значения, которое представимо типом int ( 2-х байтным целым ). Поэтому в реальных программах лучше пользоваться стандартной функцией strlen, которая описана в файле string.h. Эта функция умеет выбирать тип возврата в зависимости от модели памяти, используемой в программе. Для этого определен (define) тип ptrdiff_t в файле STDDEF.H.
4.12.Работа с памятью
Разработаем пример простой программы, распределяющей память. Функция static char allocbuf[ALLOCSIZE]; выделяет память из буфера static char allocbuf[ALLOCSIZE];, а функция void afree(char *p); освобождает память, распределенную в этом буфере. Память организована в виде стека, где базовым адресом основания стека является allocbuf, а на вершину стека указывает alloccp.
#include <stdio.h> //функции ввода-вывода
#include <string.h>//функция strlen()
#include <conio.h> //функции ввода-вывода на консоль(clrscr())
#define ALLOCSIZE 10000 //препроцессорная директива определения
//константы как равной 10000
static char allocbuf[ALLOCSIZE]; //буфер памяти (массив символов allocbuf длиной
//в 10000 символов
static char *allocp; //указатель константа на тип char
char * alloc(int n)//заголовок функции
{ //если размер оставшейся свободной памяти
if (allocbuf + ALLOCSIZE - allocp >=n)// не меньше запрашиваемого
//участка, то память выделяется.
{ //printf("%d\n",allocp);
allocp +=n; // alloccp
//printf("%d\n",allocp); // распределенная
return allocp; // память свободная память
} else//
return 0; //
} // allocbuf allocbuff+ALLOCSIZE
void afree(char *p) //
{
if (p>=allocbuf && p < allocbuf + ALLOCSIZE)//память освобождается,
allocp=p; //если адрес начала объекта принадлежит
} //нашей области allocbuf. void main (void)
{ char str[255],*p[1000]; //буфер ввода с клавиатуры str[255] и массив
int a,i,j;//для хранения списка указателей *p[1000];
a=0; i=0;
p[0]=NULL; i++;
while (((scanf("%s",str))!=EOF) && (p[i]=alloc(strlen(str)))!=0) //ввод строк
{ //пока не введен конец файла или исчерпан буфер свободной памяти.
printf("adress=%d", p[i]);
i ++;}