Студопедия
Главная страница | Контакты | Случайная страница

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

Типичная ошибка программирования.

Читайте также:
  1. n Сообщение об ошибках собираются в таблице ERROR_TABLE и передаются в функциональный модуль.
  2. Ввод команд и сообщения об ошибках
  3. История развития вычислительной техники,средств и методов программирования. Поколения ЭВМ
  4. Классификация языков программирования.
  5. Модульное программирования.
  6. Нарушение лексической сочетаемости как речевая ошибка
  7. Необходимо учитывать также повторяемость и однотипность ошибок. Если ошибка повторяется в одном и том же слове или в корне однокоренных слов, то она считается за одну ошибку.
  8. О некоторых ошибках левой оппозиции сегодня
  9. Общая задача линейного программирования.
  10. Общая задача математического программирования. Основные разделы математического программирования

1. Не выделяется достаточно места в массиве символов для хранения нулевого символа, завершающего строку.

2. Создание или использование "строки", которая не содержит завершающего нулевого символа.

3. Путаница в символьные и строковые константы.

Символьная константа – это один символ, заключенный в апострофы, например: 'A' или '\n'. Строковая константа – это последовательность символов, заключенная в двойные кавычки. В числе символов строки могут находиться любые символьные константы, например, "Visual C++\n" состоит из следующих символов: 'V', 'i', 's', 'u', 'a', 'l', ' ', 'C', '+', '+', '\n', '\0'. Таким образом, "A" – это строковая константа и состоит из двух символов: 'A' и '\0'. Соседние строковые константы транслятором "склеиваются", например: "АБВ" "ГДЕ" означает то же, что "АБВГДЕ".

Пример 1.

//Задана строка, скопировать ее в символьный массив. # include < iostream. h > void main (){/* объявляем символьный массив str1 и инициализируем его */ char str 1[]="1234567890", str 2[11]; // объявляем символьный массив без инициализации/* в цикле, пока не встретится конец строки присваиваем текущему элементу массива str2 символ из массива str1 */ for (int i =0; str 1[ i ]!='\0'; i ++) str 2[ i ]= str 1[ i ]; str2 [ i ] = '\0'; // копируем ноль-символ в str2. cout << str 2<<'\n'; // вывод строки на экран}

Обратите внимание, выход из цикла происходит, когда str 1[ i ] равно ноль-символу, т.е. ноль-символ не копируется в str 2, следовательно, это нужно сделать за циклом.

Еще одна особенность работы с символьными массивами – если элементы произвольного массива можно вводить с клавиатуры и выводить на экран только по одному элементу в цикле, то в символьный массив можно ввести сразу всю строку, используя оператор ввода

cin >>Имя_массива;

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

cout <<Имя_массива;

Следует сразу отметить, что при вводе с клавиатуры строки оператор cin автоматически добавляет в конец строки нулевой символ, так что необходимо учитывать этот факт при указании количества элементов при объявлении массива.

Пример 2.

# include < iostream. h > void main (){ char str [31]; // объявление символьного массива cout <<"Vvedite stroky (max 30 symvolov):"; cin >> str; // ввод строки cout <<"\nVu vveli stroky:"<< str; // вывод строки}

Как видно, в данном примере выделяется память под 31 символ, но пользователю в приглашении указывается, что он может ввести строку с размером максимум 30 символов, учитывая тот факт, что оператор cin добавит еще один нулевой символ в конец строки автоматически, и под него также необходимо предусмотреть выделение памяти. Далее после приглашения вводим сразу всю строку с клавиатуры в массив и затем с соответствующим сообщением выводим всю строку на экран монитора.

Второй способ определения строки – это использование указателя на символ. Объявление char * b; задает переменную b, которая может содержать адрес некоторого объекта. Однако в данном случае компилятор не резервирует место для хранения символов и не инициализирует переменную b конкретным значением. Сделать это можно, например, присвоив b указатель на уже существующий символьный массив, или динамически выделить память под новый массив.

Пример 3.

# include < iostream. h > void main (){ char str []="Здравствуй, мир!"; // объявляем символьный массив char * b; // объявляем указатель на символ b =& str [12]; // теперь b указывает на 12-ый символ str* b ='M'; // присваиваем первому элементу b символ 'М' cout << b; // выводим строку b на экран (Мир!)}

Итак, подведем итоги.




Дата добавления: 2014-12-15; просмотров: 118 | Поможем написать вашу работу | Нарушение авторских прав




lektsii.net - Лекции.Нет - 2014-2025 год. (0.008 сек.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав