Студопедия

КАТЕГОРИИ:


Архитектура-(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). Результатом роботи функції буде перший рядок.

Аналогічно, приймаючий рядок повинен бути достатньо довгим, щоб вмістити в себе копію другого.

 

<== предыдущая лекция | следующая лекция ==>
Лекція 6.3: Стандартні функції для роботи з текстовими рядками | Лекція 7.4: Операційна система FREEBSD
Поделиться с друзьями:


Дата добавления: 2014-01-04; Просмотров: 1088; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




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