русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Определение строковой переменной


Дата добавления: 2015-06-12; просмотров: 1680; Нарушение авторских прав



Рис. 12. Данные строкового типа в памяти

Последовательность \0 называется нулевым символом и рассматривается как один символ.

 

Как вы помните, язык Си не содержит строкового типа данных и не имеет никаких средств для работы со строками. К счастью, Си позволяет работать с данными строкового типа, используя массивы. Раньше мы уже определяли строку как ряд последовательных символов. Именно этим она и является— рядом символьных переменных, объединенных в нечто, называемое массивом. Элементы строки хранятся вместе в последовательных элементах памяти. В качестве примера на рис.12 показано, как выглядит переменная, имеющая значение "Привет". Каждая буква хранится в отдельном элементе памяти так же, как одиночная символьная переменная, но вся строка может быть выведена на экран монитора как единое целое при помощи одной функции puts(). Последовательность \0 является специальным символом, который Си вставляет после каждой строки. Он отмечает конец строки, указывая функции типа puts(), где следует прекратить вывод символов на экран.

Вы уже знаете как определить строковую константу — с помощью директивы #define, заключив символы строки в кавычки:

#define CLIENT "КейтТиммонс"

Чтобы определить строковую переменную, необходимо использовать тип char и указать максимальное число символов, которое может содержать строка. Например, так:

charvar_name[N];

где var_name означает имя переменной, а N — максимальное количество символов, которое всегда заключается в квадратные скобки: прямую [ и обратную ].

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



charstate[3];


Рис. 13. Определение строковой переменной

при этом, как показано на рис.13, создается строковая переменная, которая называется state и содержит два символа, плюс нулевой символ, означающий конец строки (\0).

Вы не можете записать в строку больше символов, чем было указано при ее определении, так как Си отводит ровно столько памяти, сколько необходимо для хранения заданного числа символов. Поэтому, прежде чем определять переменную, хорошенько подумайте, сколько символов может вам потребоваться.

Почему это так важно, можно пояснить на следующем жизненном примере. Допустим, вы вводите переменную, содержащую имена клиентов. Вы определили ее следующим образом:

charclient[10];

Программа работает безупречно до тех пор, пока вы не получаете заказ от господина Флаглехоффена. Когда вы попытаетесь ввести его имя в список, ваша программа остановится из-за ошибки выполнения, что иллюстрирует рис.14.


Рис. 14. Нельзя присвоить строковой переменной значение,имеющее большее количество символов, чем было для нее зарезервировано

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

charclient[80];

но если в программе будет несколько таких переменных, вы впустую потратите немало памяти компьютера.

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

main() { char client[15]; client = "Кейт"; puts(client); }

где употребляется не разрешенная инструкция

client = "Кейт";

Если вы хотите присвоить начальное значение строковой переменной, это можно сделать, определив используемую переменную одним из двух допустимых способов.

Вы можете присвоить значение определением переменной перед функцией main():

char client[] = "Флаглехоффен"; main() { puts(client); }


Рис. 15. Инициализация строки

Заметьте, что в этом случае значение максимального числа символов строковой переменной в квадратных скобках не проставлено. Максимальное число символов строковой переменной при таком способе определения зависит от используемого компилятора, но практически определяется количеством символов в начальном значении плюс один (рис.15). Заметим, что в качестве параметра функции puts() используется только имя переменной без каких-либо квадратных скобок.

Другой способ присваивания начального значения внутри функции main() несколько более сложен:

main(){ static char greet[] = "Привет"; puts(greet);}

Определение выполняется внутри функции main(), но начинается со слова static, а переменная называется статической. Определяемая таким образом переменная может быть использована только внутри функции, в теле которой она была определена. Если вы желаете присвоить начальное значение строковой переменной, определяемой внутри функции, то ее следует определить как статическую переменную.



<== предыдущая лекция | следующая лекция ==>
Присваивание значения | Проектирование программы


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.816 сек.