Программирование >>  Элементы языков с и с++ 

1 ... 37 38 39 [ 40 ] 41 42 43 ... 200


Например, рассмотрим функцию char *strsave(s). Приведем в качестве примера программу, работающую с указателями символьного типа (листинг 7.4). Программа содержит функции работы с символьными строками, в которых отражена работа с указателями.

Листинг 7.4

II 24.срр : Defines the entry point for the console application.

itinclude stdafx.h linclude <stdio.h> itinclude <conio.h> Itinclude <stdlib.h> itinclude <string.h> itinclude <inalloc.h> itdefine maxline 1000 itdefine eof -1

for getchar(),putchar() for atoiO for maiioc0

Ctrl+z

-------Ввод строки с клавиатуры-

int getiine (char s[],int lim) (

int c,i;

for(i=0; i<lim-l && (c=getchar()) != eof && с != \n; i++) s[i]=c; s[il=\0;

i++; для подсчета количества

return (i);

--Копирует t [ ] в s [ ] ---------

void strcpyKchar s[],char t[])

int i=0;

while((s[i]=t[i])!=\0) i++;



/♦выделяет no mallocO память no длине строки, на которую указывает s, и в эту память помещает саму строку, а затем выдает указатель на начало помещенной в Оуфер строки.*/

char *strsave(char *s) {

char *p;

int i=strlen(s)+1; p=(char *)malloc(i); if((p != NULL)) strcpy2(p,s); копирует строку в кучу

return(р); возвращается указатель на строку, помещенную в кучу

/* т. к. mallocO выдает указатель типа void, то принудительно приводим его к типу char, чтобы согласовать с р */

int tinain() (

Проверка strcpyK)

printf( Enter string for strcpyl > ); char s[maxline],t[maxline];

getline(t,maxline); ввод строки с клавиатуры в t strcpyl(s,t);

printf( inp.string=%s\nout.string=%s\n ,t,s);

/*-Копирует строку, на которую указывает указатель t, в строку, на которую указывает указатель s */

void strcpy2(char *s,char *t) I

while((*s=*t) != \0)

S++,-t++;

---------------------------------



Проверка strcpy2()

printf( Enter string for strcpy2 > );

getiine(t,maxline); ввод строки с клавиатуры в t

strcpyl(&s[0],&t[0]);

printf( input string=%s\noutput string=%s\n ,t,s);

Проверка strsaveO

printf( Enter string for strsave> );

getiine(s,maxline); ввод строки в s

char *p=strsave(&s[0]); в p указатель на память, куда записана строка из s

printf( Saved string=%s\n ,p); getchO;

Функция void strcpyi(char s[l,char t[]) копирует массив В массив. Это происходит поэлементно с помощью оператора цикла while, в заголовочной части его находится выражение, которое надо вычислить, чтобы принять решение о продолжении/завершении цикла.

При вычислении выражения происходит поэлементная пересылка: пересылается один элемент, затем начинает работать тело while, в котором всего один оператор наращивания индекса элемента массива. Когда тело заверщается, управление передается в заголовочную часть while, где снова вычисляется выражение, обеспечивающее пересылку следующего элемента массива в массив S и т. д., пока не будет переслан последний символ: \0. Когда это произойдет, результат выражения станет равным нулю, и функция завершится. Функция не возвращает никакого значения (ее тип void), но через параметр, адрес которого передается в функцию (массив s [ ]), возвращает копию массива t [ ].

Параметрами функции void strcpy2(char *s,char *t) являются указатели типа char. Эта функция копирует символы, начиная с адреса, на который указывает указатель t, в область, на которую указывает указатель s.

Перед применением этой функции (как отмечалось ранее) надо определить область памяти, на которую указывает указатель s: либо через массив, либо через функцию maiioc (). В теле strcpy2 () организован цикл посимвольного перемещения символов из одной области в другую с помощью указателей этих областей: указатель *t передает элемент входной области, а указатель *s - выходной.



1 ... 37 38 39 [ 40 ] 41 42 43 ... 200

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика