КАТЕГОРИИ: Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748) |
Конкатенація рядків
Функція strcpy(). Копіювання рядків. Визначення довжини рядка. Кожен рядок на мові С визначається наступним чином – це є послідовність символів, початок якої вказує символьний вказівник, а кінеці помічений нульовим символом. В ході програм дуже часто виникає необхідність визначити довжину рядка, тобто порахувати кількість символів в ньому. Цю довжину можна отримати за допомогою стандартної функції strlen(). Функція описана в заголовку <string.h> та має наступний вигляд: strlen (рядок); в якості аргументу функція приймає вказівник на рядок, або сам рядок, а повертає значення типу size_t. В заголовочному файлі <string.h> цей тип перевизначений з unsigned, так що фактично функція повертає число без знаку. Варто відзначити, що тип size_t часто використовується при роботи з рядками, тому просто слід запамятати, що size_t є аналогом unsigned.
В мові С існує декілька функцій копіювання рядків. Через специфічну техніку роботи з рядками не можна просто привласнити один рядок іншому. Весь процес відбувається наступним чином: вихідний рядок копіюється з того місця в памяті, що було йому виділено при оголошенні і заноситься в інше, яке також повинне бути зарезервовано, чи то шляхом оголошення, чи то через програмне виділення памяті.
Дана бібліотечна функція копіює цілий рядок до завданого місця в памяті. strcpy (destination, source); Як видно, функція має два аргументи – місце призначення, тобто КУДИ буде скопійовано рядок, та вихідний рядок, тобто місце в памяті ЗВІДКИ він буде скопійований. При виклику цієї функції необхідно виділити пам'ять для нового рядка. Це повязано з тим, що функція не перевіряє, чи достатньо місця за вказаною адресою. Якщо пам'ять для рядка-копії не була спеціально виділена, то функція затре новою інформацією strlen(source) комірок памяті, починаючи з адреси destination. Зрозуміло, що наслідки можуть бути непередбачені.
#include <stdio.h> #include <string.h> #include <stdlib.h> char source [ ] = “Вихідний рядок”; int main () { char dest1 [80]; char *dest2; printf (“%s”, source); strcpy (dest1, source); printf (“Скопійований рядок %s”, dest1); dest2 = malloc (srtlen (source)+1); strcpy (dest2, source); printf (“Рядок скопійований в інше місце %s”, dest2); return (0); }
Конкатенація рядків означає зчеплення, тобто один рядок прєднується до кінця іншого. В стандартній бібліотеці <string.h> для цього передбачена функція strcat(). strcat (str1, str2); Зрозуміло, що функція має два аргументи - str2 (рядок копія якого буде причеплена до str1). Результатом роботи функції буде перший рядок. Аналогічно, приймаючий рядок повинен бути достатньо довгим, щоб вмістити в себе копію другого.
Дата добавления: 2014-01-04; Просмотров: 1088; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |