Главная страница Случайная страница КАТЕГОРИИ: АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
Способы описания строк
Учитывая связь массивов и указателей (имя массива является указателем-константой на первый элемент массива), строку можно описать двумя способами. ¨ Как символьный массив а) с указанием числа элементов: 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);
|