Студопедия

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

КАТЕГОРИИ:

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






Листинг 12.9. Заполнение массива






1: //Листинг 12.9. Использование метода cin.get()

2:

3: #include < iostream.h>

4:

5: int main()

6: {

7: char buffer[80];

8: cout < < " Enter the string: ";

9: cin.get(buffer, 79); // ввод завершается после 79 символа или символа разрыва строки

10: cout < < " Here's the buffer: " < < buffer < < endl;

11: return 0;

12: }

 

Результат:

Enter the string: Hello World

Here's the buffer: Hello World

 

Анализ: В строке 9 осуществляется вызов метода cin.get(). Буфер ввода, заданный в строке 7, передается в функцию как первый аргумент. Второй аргумент задает максимальную длину строки, равную 79 символам. Допускается ввод только 79 символов, поскольку последний элемент массива отводится на концевой нулевой символ строки. Устанавливать третий аргумент не обязательно. В большинстве случаев в качестве разделительного символа подходит задаваемый по умолчанию символ разрыва строки.

 

Функции strcpy() и strncpy()

 

Язык C++ унаследовал от С библиотечные функции, выполняющие операции над строками. Среди множества доступных функций есть две, которые осуществляют копирование одной строки в другую. Это функции strcpy() и strncpy(). Функция strcpy() копирует строку целиком в указанный буфер, как показано в листинге 12.10.

Листинг 12.10. Использование функции strcpy()

1: #include < iostream.h>

2: #include < string.h>

3: int main()

4: {

5: char String1[] = " No man is an island";

6: char String2[80];

7:

8: strcpy(String2, String1);

9:

10: cout < < " String1: " < < String1 < < endl;

11: cout < < " String2: " < < String2 < < endl;

12: return 0;

13: }

 

Результат:

String1: No man is an island

String2: No man is an island

 

Анализ: Файл заголовка string.h включается в программу в строке 2. Этот файл содержит прототип функции strcpy(). В качестве аргументов функции указываются два массива символов, первый из которых является целевым, а второй — массивом источника данных. Если массив-источник окажется больше целевого массива, то функция strcpy() введетданные за пределы массива.

Чтобы предупредить подобную ошибку, в этой библиотеке функций содержится еще одна функция копирования строк: strncpy(). Эта функция копирует ряд символов, не превышающий длины строки, заданной в целевом массиве. Функция strncpy() также прерывает копирование, если ей повстречается символ разрыва строки. Использование функции strncpy() показано в листинге 12.11.

Листинг 12.11. Использование функции strncpy()

1: #include < iostream.h>

2: #include < string.h>

3: int main()

4: {

5: const int MaxLength = 80;

6: char String1[] = " No man is an island";

7: char String2[MaxLength+1];

8:

9:

10: strncpy(String2, String1, MaxLength);

11:

12: cout < < " String1: " < < String1 < < endl;

13: cout < < " String2: " < < String2 < < endl;

14: return 0;

15: }

 

Результат:

String1: No man is an island

String2: No man is an island

 

Анализ: В строке 10 программа вместо функции strcpy() используется функцию strncpy(), третий параметр MaxLength которой задает максимальную длину копируемой строки. Размер массива String2 задан как MaxLength+1. Дополнительный элемент потребовался для концевого нулевого символа строки, который добавляется автоматически обеими функциями — strcpy() и strncpy().

 


Поделиться с друзьями:

mylektsii.su - Мои Лекции - 2015-2024 год. (0.01 сек.)Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав Пожаловаться на материал