Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Результат работы



отдохнешь и ты.

Явное задание размера памяти. При объявлении массива можно указать: char ml[36] = "В полдневный жар в долине Дагестана"; вместо

char ml[ ] = "В полдневный жар в долине Дагестана";. Число элементов по крайней мере на один нулевой символ больше, чем длина строки. Как и в других статических или внешних массивах, любые неиспользованные элементы автоматически инициализируются нулем (который в символьном виде является нулевым байтом '\0', а не символом цифры нуль).

Массивы символьных строк

Обычно бывает удобно иметь массив символьных строк. В этом случае можно использовать индекс для доступа к нескольким разным строкам [14].

char *poet[4] = {"Погиб поэт!", " - невольник чести - ",

"Пал,", " оклеветанный молвой..."};

Можно сказать, что poet является массивом, состоящим из четырех указателей на символьные строки. Каждая строка символов представляет собой символьный массив, потому имеется четыре указателя на массивы. Первым указателем является poet[0], и он ссылается на первую строку. Второй указатель poet[\] ссылается на вторую строку. Каждый указатель, в частности, ссылается на первый символ своей строки:


*poet[0] ==TT, *poet[l] ==", *poet[2] =='П' и т.д.

Инициализация выполняется по правилам, определенным для массивов. Тексты в кавычках эквивалентны скобочной записи

{{...},{...},...,{...}};, где многоточия подразумевают строки. В первую очередь можно отметить, что первая последовательность, заключенная в двойные кавычки, соответствует первым парным скобкам и используется для инициализации первого указателя символьной строки. Следующая последовательность в двойных кавычках инициализирует второй указатель и так далее. Запятая разделяет соседние последовательности.

Кроме того, мы можно явно задавать размер строк символов, используя описание, подобное такому:

charpoet[4][23];. Разница заключается в том, что второй индекс задает «прямоугольный» массив, в котором все «ряды» (строки) имеют одинаковую длину. Описание

char *poet[4]; однако, определяет «рваный» массив, где длина каждого «ряда» определяется той строкой, которая этот «ряд» инициализировала. Рваный массив не тратит память напрасно (рис. 1.15).

  «РВАНЫЙ» МАССИВ  
  п о г и б   п о э т   Х0Н44444444М  
-   н е в о л ь н и к   ч е с т и   - Х0НМ  
п а л i                                
о к л е в е т а н н ы й   м о л в о и  
  ПРЯМОУ1 ГОЛЬНЫЙМАС СИВ  
  п о г и б   п о э т I  
-   н е в о л ь н и к   ч е с т и   -
п а л i
о к л е в е т а н н ы и   м о л в о и
     

Рис. 1.15 85


Указатели и строки

Большинство операций языка Си, имеющих дело со строками, работает с указателями. Для размещения в оперативной памяти строки символов необходимо предпринять следующие действия:

1) выделить блок оперативной памяти под массив;

2) осуществить ввод строки по адресу массива, используя специальную функцию ввода информации.

Пример

char *name;

scanf("%s", name);

Данная программа содержит ошибку, поскольку ЭВМ запишет строку по неизвестному адресу, так как *пате не инициализирован. Возможно «зависание» компьютера.

Пример

char -k name;      
name = (char *)mall oc (10);
scan f ( II Q. _ II О О f name);    

Данная программа корректна. Однако, выделенной памяти может не хватить. Тогда часть символов будет записана в область, не предназначенную для этого. Доработанный вариант программы, считывающей только 9 символов, приведен ниже.

char -k name;    
name = (char *)malloc (10);
scan f ( "%9s", name);  

Как только выделена память для массива, можно считывать строку. Для ввода часто используют функции scanfn gets.

Функция gets получает строку от стандартного устройства ввода системы. Функция читает символы до тех пор, пока не встретится символ новой строки '\п', который создается при нажатии клавиши <Enter>. Функция берет все символы до (но не включая) символа новой строки, присоединяет к ним нулевой символ '\0' и передает строку вызывающей программе [4].


/^Получение имени №1.*/ main ()

{

char name[81]; /^Выделение памяти под строку.*/

printf("Привет, как вас зовут?\п");

gets (name);

/*Размещение имени по адресу name.*/

printf("Хорошее имя, %s.\n", name); }

Функция примет любое имя (включая пробелы) длиной до 80 символов.





Дата публикования: 2014-11-04; Прочитано: 220 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.007 с)...