|
Программирование >> Элементы языков с и с++
Например, рассмотрим функцию 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 - выходной.
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |