Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Способы описания строк






Учитывая связь массивов и указателей (имя массива является указателем-константой на первый элемент массива), строку можно описать двумя способами.

¨ Как символьный массив

а) с указанием числа элементов:

char < имя> [< число элементов> ];

 

б) без указания числа элементов, с инициализацией:

 

char < имя> [ ]=< литерал>;

 

¨ Через указатель

char* < имя>;

 

В этом случае необходимо выделить память под строку, например, функцией malloc:

< имя> =(char*) malloc(< число элементов >);

 

Резервируемое число элементов должно равняться числу значащих символов строки плюс 1 байт для нуль-терминатора.

¨ Пример. Различия в определении строки как массива и через указатель

Пусть требуется создать две строки, содержащие слово из 6 букв string, причем одну из строк надо ввести с клавиатуры, а затем скопировать в другую строку.



 

char str1 [10]; // массив из 10 элементов с неопределенными значениями;

// str1 – указатель-константа на начало массива;

//потенциальная строка из 9 символов плюс ‘\0’

char *str2, *str3; //2 указателя на символьный тип; никуда не указывают;

// потенциальные указатели на строки

int i;

// Выделим память под str2

str2=(char *)malloc(10); //теперь str2 указывает на первый байт поля из 10 байтов

// Введем str2

scanf(“%s”, str2); //ввод последовательности символов как строки, т.е. с простановкой

//‘\0’ в конце; str2 указывает на строку из 7 символов

//Скопируем str2 в str1

for(i=0; i< 7; i++)

str1[i]= str2[i]; // элементы строки str2 обрабатываем как элементы массива

// Записать str1= str2 нельзя, так как str1 – указатель-константа!

// Выведем обе строки

printf(“str1=%s \n =%s \n”, str1, str2);

 






© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.