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